这次还是来源于leetcode
虽然是这个题被划分到BackTracking分类下,但效率更高的解法和回溯好像没什么关系。我的这个解法来源于wiki
一个公式可以直接把对应索引变为相应的Gray code
unsigned int binaryToGray(unsigned int num)
{
return (num >> 1) ^ num;
}
实现如下:
int* grayCode(int n, int* returnSize) {
*returnSize= 1<<n;
int *ret=malloc(sizeof(int)*(*returnSize));
if(NULL==ret)
exit(-1);
ret[0]=0;
int i=1;
for(;i<(*returnSize);++i)
ret[i]=i^(i>>1);
return ret;
}