그레이 코드는 두 개의 연속 값이 한 비트만 다른 이진수 시스템이라는 것을 알고 있습니다. 코드의 총 비트 수를 나타내는 음이 아닌 정수 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, ]