首页 > 试题广场 >

格雷码

[编程题]格雷码
  • 热度指数:10481 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
格雷码是一种二进制编码系统,如果任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)
给定一个非负整数n,表示代码的位数,打印格雷码的序列。格雷码序列必须以0开头。
例如:给定n=2,返回[0,1,3,2]. 格雷码的序列为:
00 - 0
01 - 1
11 - 3
10 - 2
注意:
  • 对于一个给定的n,格雷码的序列不一定是唯一的,
  • 例如:根据题目描述,[0,2,3,1]也是一个有效的格雷码序列

示例1

输入

2

输出

[0,1,3,2]
class Solution:
    def grayCode(self , n ):
        array=[0]
        a=[]
        for i in range(1,n+1):
            a=reversed(array)
            a=list(a)
            for j in range(len(a)):
                a[j]+=2**(i-1)
            array+=a
        return array
n=0, array=[0]
n=1,array=[0,1]
n=2,array=[0,1,3,2]
先从n=0开始,n=1时,array中的1是0加上2^(i-1)得到,以此类推,n=2中的3 2是由[0,1]反转加上2^(i-1)得到
发表于 2021-05-07 22:16:30 回复(0)