找规律,格雷码的一种生成方法如下图。对于n先将n-1的所有格雷码复制一下,然后轴对称所有n-1的格雷码,然后前半部分补0,后半部分补1,
就得到了n的格雷码。
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> res(1, 0);
while(n--) { //经过n次复制+轴对称+补0补1操作,得到的就是n的格雷码
for(int i = res.size() - 1; i >= 0; --i) { //轴对称操作
res[i] *= 2; //补0,相当于乘2(因为是二进制串)
res.push_back(res[i] + 1); //补1,相当于乘2的数再加1
}
}
return res;
}
};