题目分析
格雷编码本身的计算方式就是二进制,而n每增加1,二进制的位数就会增加一位,依据二进制产生的数字也会增加,但是这个增加是按照自然数的顺序的。因此只需要利用个数增加的规律就能够计算出相应的格雷编码了。但是在力扣上解答的时候,不能直接
for(int i=0;i<pow(2,n);i++)
res.push_back(i);
所以我设置了一个index,利用二进制的特性设计了代码。
代码如下:
class Solution {
public:
vector<int> grayCode(int n) {
int t=1;
vector<int> res;
while(n>=0){
if(res.size()==0)
res.push_back(0);
else{
for(int i=t-1;i>=0;i--)
res.push_back(res[i]+t);
t*=2;
}
--n;
}
return res;
}
};