2진수 한 자리만 차이가 나요. Gray Code.
제목: The gray code is a binary numeral system where two successive values differ in only one bit.Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0. For example, given n = 2, return [0,1,3,2]. Its gray code sequence is: 00 - 0 01 - 1 11 - 3 10 - 2 Note: For a given n, a gray code sequence is not uniquely defined. For example, [0,2,3,1] is also a valid gray code sequence according to the above definition. For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
사고방식: 제목은 이런 규칙이 순서를 바꾸는 것이 하나만은 아니지만 내가 그것을 썼으면 좋겠다는 것이다.관찰을 통해 나는 그것의 위치 변화 순서는 01100123210 같은 것이어야 한다고 생각한다.
코드:
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> v;
v.push_back(0);
if(n == 0)
return v;
int flag = 1;
int num = 1<<n;
int i = 0;
int tmp = 0;
for(;num>1;num--)
{
v.push_back(tmp^(1<<i));
tmp ^= 1<<i;
if(flag == 1)
{
if(i == n-1)
{
i--;
flag = -1;
}
else
i++;
}
else
{
if(i == 0)
{
i++;
flag = 1;
}
else
i--;
}
}
return v;
}
};
특이한 방법: 왜 i가 연속적으로 성장할 때 (i>>1)^i는 항상 비트 1의 변화를 일으킬까요?
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> v;
int num = 1<<n;//num n gray
for(int i=0;i<num;i++)
v.push_back((i>>1)^i); // i n^(n/2)
return v;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.