leedcode 格雷编码

格雷编码xi相邻编码只有一位不同,观察格雷编码

1:0,1

2:00,01,11,10

3:000,001,011,010,110,111,101,100

4:0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1111,1110,1010,1011,1001,1000

可以看出格雷编码的一些规律,以三位的格雷编码为例,它由两部分构成,第一部分由2位格雷编码从左到右的元素在最左边加0,在最左边加0不影响数字的大小,所以第一部分由2位格雷编码从左到右的元素组成,第二部分由2位格雷编码从右向左的远足在最左边加1组成,在最左边加1就是给原来的元素加2^2(2^n-1).所以使用递归得到结果。

class Solution(object):
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        if n == 0:
            return [0]
        elif n == 1:
            return [0, 1]
        else:
            return self.grayCode(n - 1) + [x + (1 << n - 1) for x in reversed(self.grayCode(n - 1))]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值