格雷码的构造基于以下规律:
这里有一个技巧就是不要用二进制表示,而是找规律把这个二进制表示变为整数运算。
递归写法
class Solution {
public:
vector<int> grayCode(int n) {
if(n==0) return {0};
if(n==1) return {0,1};
vector<int> tmp = grayCode(n-1);
vector<int> res;
int k = pow(2,n-1);
//cout<<k<<endl;
//cout<<tmp.size()<<endl;
for(int i=0;i<tmp.size();i++){
res.push_back(tmp[i]);
}
for(int i=tmp.size()-1;i>=0;i--){
res.push_back(tmp[i]+k);
}
return res;
}
};