Loading

【LeetCode】1238. 循环码排列

【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
posted @ 2023-02-23 12:51  杨谖之  阅读(38)  评论(0编辑  收藏  举报