国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Gray Code [leetcode]

Gray Code [leetcode]

来源:程序员人生   发布时间:2014-10-04 08:00:01 阅读次数:3480次

第一种方法是直接排列

以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反复,即可排列出n个位元的格雷码。

vector<int> grayCode(int n) { vector<int> res; res.push_back(0); if (n == 0) return res; res.push_back(1); int total = 1 << n; for (int i = 2;i < total; i+=2) { int j = 1; while((res.back() & j) == 0) j <<= 1; j <<= 1; res.push_back(res.back() ^ j); res.push_back(res.back() ^ 1); } return res; }

第二种方法是镜射排列

vector<int> grayCode(int n) { vector<int> res; if (n == 0) { res.push_back(0); return res; } res.push_back(0); res.push_back(1); for (int i = 2; i <= n; i++) { int s = 1 << (i-1); for (int j = res.size() - 1; j >= 0; j--) { res.push_back(res[j] + s); } } return res; }


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生