【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