1.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.
思路:学过格雷码的童鞋应该比较好理解,比如n=3时
000
001
011
010
110
111
101
100
规律是 将格雷码看成是上下两部分 n=1
上 0 下 1
n=2
上为n=1时的格雷码
下为n=1时的格雷码的倒序再加上最前面的1
vector<int> grayCode(int n) {
vector<int> result;
result.push_back(0);
for(int i=0; i<n;i++){
int highest = 1<<i;
int len = result.size();
for(int i=len -1; i>=0; i--){
result.push_back(highest+result[i]);
}
}
return result;
}