LeetCode 89 格雷编码[异或 数学] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 89 格雷编码[异或 数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
这道题本质上是一道数学题,等于说自己得出一个结论,然后证明结论是对的。首先对于任意一个小于2的n次方的数m,如果它对应位数与后一位异或(最后一位与0异或)得到的数作为编码序列, 那么m+1,它其实是改变的k个位与m不同,换句话说,m的后k-1位是1,m+1的后k-1位是0,m+1进行同样的异或操作话,只有一位与m的编码序列不同,这正是我们要得到的结论,如此循环直到n-1,代码如下:
class Solution
public:
vector<int> grayCode(int n)
// 2的n次方的长度
int size = 1 << n;
vector<int> res(size);
for(int i = 0; i < size; i ++)
// i右移1与i异或,相当于后一位与前一位异或
res[i] = (i >> 1) ^ i;
return res;
;
以上是关于LeetCode 89 格雷编码[异或 数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章