leetcode日记(76)格雷编码
这道题知道格雷编码会很简单,不知道就会很难。
算法本身没有难度,主要考察的是二进制变化的代码。
其实数据在代码中是以二进制存储的,所以二进制的前移可以直接使用“<<”、“|”,比如二进制1000就可以直接用“1<<3”(1左移3位),然后101要在最右添1可以用“(1<<3)|101”。
知道这个就好做了:
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> v{0,1};
for(int i=1;i<n;i++){
vector<int> vv(v);
reverse(vv.begin(),vv.end());
for(int j=0;j<vv.size();j++){
vv[j]=(1<<i)|vv[j];
}
v.insert(v.end(),vv.begin(),vv.end());
}
return v;
}
};
(其实可以不新建vv,直接加在v后面,降低空间复杂度)