题目大意:给一个数n,代表多少位二进制,找出这些二进制数的序列,序列中相邻的数只有一位二进制不相同。
解题很简单,序列中数字的规律是这样的,拿n==2为例,头两个数为
00
01;
那下一半就是第二位置为1,第一位的值和之前的两个成镜像关系,于是就是
00
01
——
11
10
那n==3时就是
000
001
011
010
——
110
111
101
100
了,很简单,代码也很好写。
class Solution {
public:
vector<int> result;
vector<int> grayCode(int n) {
result.push_back(0);
if(n<1)return result;
result.push_back(1);
for(int i=2;i<=n;i++){
int lefest=1<<(i-1);
int addictive=lefest;
while(lefest--)
result.push_back(addictive+result[lefest]);
};
return result;
}
};