题目描述:
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.
考察位操作:
从题目中例子可以发现这么一个规律:
假设结果数组为B,原始数组为A,则有: B[i] = A[i] ^ (A[i]>>1). 例如 : A[3] =3 B[3] = 3^(3>>1) = 011^001 = 010 = 2
解法如下:
1 class Solution { 2 public: 3 vector<int> grayCode(int n) { 4 int len = pow(2.0,n),i,a; 5 vector<int> vi; 6 for(i=0;i<len;i++) 7 { 8 a= i^(i>>1); 9 vi.push_back(a); 10 } 11 return vi; 12 } 13 };