格雷码(Gray code)简单 c 实现

来源:互联网 发布:kindle保护套推荐 知乎 编辑:程序博客网 时间:2024/05/01 10:54

这次还是来源于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;}
0 0
原创粉丝点击