首页 > 其他分享 >【LeetCode】1238. 循环码排列

【LeetCode】1238. 循环码排列

时间:2023-02-23 13:00:53浏览次数:59  
标签:格雷 start 1238 循环码 异或 自然码 LeetCode

【LeetCode】1238. 循环码排列

题目链接

格雷码(循环码)

格雷码是一种二进制编码,两个相邻数字的格雷码只有一位二进制位的数码不同。

格雷码

自然码转格雷码

数的自然码右移一位和自然码本身做异或得到数的格雷码。

gray = num ^ (num >> 1)

从start开始的格雷码

  • 我们先得到从0开始到2^n-1的格雷码。
  • 0的格雷码是0,任何数和0异或都得到数本身。
  • 两个相邻的格雷码只有一位不同,和任何数进行按位异或,也只有那一位得到的结果不同,仍然是循环码。
class Solution:
    def circularPermutation(self, n: int, start: int) -> List[int]:
        r = []
        for i in range(2**n):
            r.append((i^(i>>1))^start)
        return r

标签:格雷,start,1238,循环码,异或,自然码,LeetCode
From: https://www.cnblogs.com/yangxuanzhi/p/17147560.html

相关文章