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=1
上 0
下 1
n=2
上为n=1时的格雷码再加上最高位的0
下为n=1时的格雷码的倒序再加上最高位的1
以此类推。。。
int* grayCode(int n, int* returnSize) {
int *retArr = (int *)malloc(sizeof(int) * 100000);
if(n == 0){
retArr[0] = 0;
*returnSize = 1;
return retArr;
}
int retSize = 2;
retArr[0] = 0;
retArr[1] = 1;
int i, j;
for(i = 2; i <= n; i++){
for(j = 0; j < retSize; j++){
retArr[retSize + j] = retArr[retSize - j - 1] ^ retSize;
}
retSize = retSize * 2;
}
*returnSize = retSize;
return retArr;
}