LeetCode 第89题:格雷编码
题目描述:
n位格雷码序列是一个由2的n次方的整数组成的序列,其中:
- 每个整数都在范围【0,2^n -1】内(包含0和2^n -1)
- 第一个整数是0
- 一个整数在序列中出现不超过一次
- 每对相邻整数的二进制表示恰好一位不同,且
- 第一个和最后一个整数的二进制表示恰好一位不同
- 给你一个整数n,返回任一有效的n位格雷码序列。
示例1:
输入:n = 2 输出:[0,1,3,2] 解释: [0,1,3,2] 的二进制表示是 [00,01,11,10] 。 - 00 和 01 有一位不同 - 01 和 11 有一位不同 - 11 和 10 有一位不同 - 10 和 00 有一位不同 [0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01] 。 - 00 和 10 有一位不同 - 10 和 11 有一位不同 - 11 和 01 有一位不同 - 01 和 00 有一位不同
示例2:
输入:n = 1 输出:[0,1]
题目解析:
规则法,根据上述定理可得格雷编码的规律,第i个格雷编码可以表示为(i>>1)^i
int* getgelei(int n,int *returnSize) {int retsize = 1<<n;//左移把变量放在右侧*returnSize =retsize;//把最后返回数组的长度修改为2的n次方int *ret = (int*)malloc(sizeof(int)*retsize);//2的n次方内存占用for(int i = 0;i<retsize;i++){ret[i] = (i>>1)^i;//右移把变量放在左侧}return ret; }