您的位置:首页 > 其它

[LeetCode] 89. Gray Code

2017-02-26 00:47 288 查看

[LeetCode] 89. Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0

01 - 1

11 - 3

10 - 2

Note:

For a given n, a gray code sequence is not uniquely defined.

For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.

一开始的想法是,假如n=3。

[0 0 0], idx=0, bit[idx] ^= 1, idx += 1

[0 0 1], idx=1, bit[idx] ^= 1, idx += 1

[0 1 1], idx=2, bit[idx] ^= 1, idx -= 1

[1 1 1], idx=1, bit[idx] ^= 1, idx -= 1

[1 0 1], idx=0, bit[idx] ^= 1, idx += 1

[1 0 0], idx=1, bit[idx] ^= 1, idx += 1

[1 1 0], idx=2, bit[idx] ^= 1, idx -= 1

[0 1 0], idx=1, bit[idx] ^= 1

定义一个指针idx游走于位间,结果WA了。。。原来题目只接受特定的递归的那种情况。

那就递归咯。

[0 0 0], [0 0 1], [0 1 1], [0 1 0] 这是n=2的情况

可见n=3的时候前面一半是n=2的情况,观察后面的:

[1 1 0], [1 1 1], [1 0 1], [1 0 0]

其实就是 4 (2^n-1) 反向加上 n=2 的情况。

class Solution {
public:
vector<int> grayCode(int n) {
if (n == 0) return vector<int>(1, 0);
vector<int> res = grayCode(n-1);
int tmp = pow(2, n-1);
for (int i=tmp-1; i>=0; --i) {
res.push_back(tmp + res[i]);
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode