[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]89. Gray Code
- [LeetCode] 89. Gray Code
- [leetcode]89. Gray Code
- LeetCode - 89. Gray Code
- leetcode 89. Gray Code
- leetcode: 89. Gray Code
- 【LeetCode】89. Gray Code
- LeetCode 89. Gray Code
- [Leetcode]@python 89. Gray Code
- Leetcode 89. Gray Code
- LeetCode *** 89. Gray Code
- Leetcode 89. Gray Code
- Leetcode 89. Gray Code
- 89. Gray Code [leetcode]
- LeetCode 89. Gray Code
- [leetcode] 89. Gray Code
- [LeetCode] 89. Gray Code
- [Leetcode] 89. Gray Code
- LeetCode 89. Gray Code
- [LeetCode] 89. Gray Code