https://leetcode.com/problems/gray-code/
格雷码,其实我没有搞清楚格雷码的规律。以3为例,我以为是这样的:
000,001,010,011,100,101,110,111
所以并没有什么规律,但是,其实格雷码是这样的:
000,001,011,010,110,111,101,100
这样规律就很明显了,第n个数字的格雷码就是给第n-1个数字的格雷码逆序加上1<<n位
所以代码:
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result;
result.push_back(0);
for(int i=0;i<n;i++){
int highest=1<<i;
for(int i=result.size()-1;i>=0;i--){
result.push_back(highest+result[i]);
}
}
return result;
}
};