n 位格雷码序列 是一个由 2n 个整数组成的序列,其中: 每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1) 第一个整数是 0 一个整数在序列中出现 不超过一次 每对 相邻 整数的二进制表示 恰好一位不同 ,且 第一个 和 最后一个 整数的二进制表示 恰好一位不同 给你一个整数 n ,返回任一有效的 n 位格雷码序列 。
class Solution:
def grayCode(self, n: int) -> List[int]:
'''
n = 2 [ 00, 01, 11, 10]
补 1 [100, 101, 111, 110]
逆 序 [110, 111, 101, 100]
n = 3 [000, 001, 011, 010, 110, 111, 101, 100]
归纳总结:n位格雷码的前一半是n - 1位格雷码的高位补0,后一半是高位补1的逆序
'''
res, one = [0], 1
for _ in range(n):
for j in range(len(res)-1,-1,-1):
res.append(one + res[j])
one <<= 1
return res