格雷碼的構造基於以下規律:
這裏有一個技巧就是不要用二進制表示,而是找規律把這個二進制表示變爲整數運算。
遞歸寫法
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;
}
};