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.
class Solution
{
public:
vector<int> grayCode(int n)
{
vector<int> bin(n,0);
vector<int> res;
if(n==0)
{
res.push_back(0);
return res;
}
int hold = 1;
for(int i=0; i<n; i++)
hold = hold*2;
for(int i=0; i<hold;i++)
{
vector<int> gray(n,0);
gray[0] = bin[0];
int x = hold/2;
int temp = gray[0]*x;
x = x/2;
for(int j=1; j<n; j++)
{
gray[j] = bin[j-1] ^ bin[j];
temp = temp + x*gray[j];
x = x/2;
}
res.push_back(temp);
int count = 0;
temp = 1;
for(int j=n-1; j>=0; j--)
{
count = bin[j] + temp + count;
bin[j] = count%2;
count = count/2;
temp = 0;
}
}
return res;
}
};