그레이 코드는 두 개의 연속 값이 한 비트만 다른 이진수 시스템이라는 것을 알고 있습니다. 코드의 총 비트 수를 나타내는 음이 아닌 정수 n이 있다고 가정합니다. 그레이 코드 시퀀스를 인쇄해야 합니다. 그레이 코드 시퀀스는 0으로 시작해야 합니다. 따라서 입력이 2이면 결과는 [0,1,3,2]가 됩니다. 이는 0의 회색은 00, 1의 회색은 01, 2의 회색은 11이고 3의 회색은 10입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 배열 하나 만들기
- 각 숫자에 대한 회색 코드를 찾아 배열로 추가합니다.
- 회색으로 변환하기 위해 숫자를 가져와서 숫자를 오른쪽으로 1비트 이동한 후 XOR을 수행합니다.
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> grayCode(int n) { vector <int> ans; for(int i =0; i<1<<n; i++){ ans.push_back(i^(i>>1)); } return ans; } }; main(){ Solution ob; print_vector(ob.grayCode(4)); }
입력
4
출력
[0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8, ]