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之路的主要内容,如果未能解决你的问题,请参考以下文章

89. 格雷编码

Leetcode 89.格雷编码

[LeetCode] 89. 格雷编码

leetcode-89-格雷编码

leetcode(js)算法89之格雷编码

Leetcode No.89 格雷编码(DFS)