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.
Example 1:
Input: 2 Output: [0,1,3,2] Explanation: 00 - 0 01 - 1 11 - 3 10 - 2 For a given n, a gray code sequence may not be uniquely defined. For example, [0,2,3,1] is also a valid gray code sequence. 00 - 0 10 - 2 11 - 3 01 - 1
Example 2:
Input: 0
Output: [0]
Explanation:
We define the gray code sequence to begin with 0.A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.Therefore, for n = 0 the gray code sequence is [0].
解题思路:首先用 n = 7的情况来简单认识一下格雷码的编码过程:
G(0) = 000 ^ 000 = 000
G(1) = 001 ^ 000 = 001
G(2) = 010 ^ 001 = 011
G(3) = 011 ^ 001 = 010
G(4) = 100 ^ 010 = 110
G(5) = 101 ^ 010 = 111
G(6) = 110 ^ 011 = 101
G(7) = 111 ^ 011 = 100
不难发现第 i 个的格雷码,就是 i 本身的二进制与该二进制的右移一位的异或。
class Solution {
public:
vector<int> grayCode(int n) {
n = 1 << n;
vector<int>ans(n, 0);
for(int i = 0; i < n; ++ i )
ans[i] = i^(i >> 1);
return ans;
}
};