您的位置:首页 > 其它

Leetcode: Gray Code

2016-08-24 15:43 281 查看
原题链接:https://leetcode.com/problems/gray-code/

我在github上的leetcode仓库:https://github.com/cooljacket/leetcodes

题意

使用镜像法构建格雷码序列。

思路

参考维基百科的解释,镜像法如下图所示:



有了上图之后,可以看出,这其实是个很直观的算法:

1. 从0开始;

2. 每次将上一步的倒过来复制一遍,然后把这部分目前的最高位置为1,追加到原来的部分作为下一步的输入。

代码

class Solution {
public:
// 镜像构建法很容易理解,就是每次对称复制一遍,然后在后半部分的开头的最高位“+1”
// 注意n=0的情况是返回{0}
vector<int> grayCode(int n) {
vector<int> allCodes;
allCodes.push_back(0);
for (int i = 1; i <= n; ++i) {
vector<int> mirror(allCodes.rbegin(), allCodes.rend());
int mask = 1 << (i-1);
for (int j = 0; j < allCodes.size(); ++j) {
mirror[j] = mask | mirror[j];
}
allCodes.insert(allCodes.end(), mirror.begin(), mirror.end());
}
return allCodes;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: