前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >菜鸟的每日力扣系列——89. 格雷编码

菜鸟的每日力扣系列——89. 格雷编码

作者头像
才浅Coding攻略
发布2022-12-12 17:35:42
1800
发布2022-12-12 17:35:42
举报
文章被收录于专栏:才浅coding攻略才浅coding攻略

题目中介绍的格雷码序列可能不太好理解,我这里画了一张1~3位格雷编码的图来更直观的看下它的生成过程。首先格雷编码的第一位是0,从一位开始是0和1;然后到两位时,先在一位的基础上补0,在最高位产生进位时在前面加个1;到三位时在两位的基础上补0,产生进位时在最高位补1。

另外,我们看箭头连起来的数据块是和上一次的数据除了最高位,其余部分是对称的关系,即可以将原序列反转后拼到最高位的后面。由此,本题可以转换为推导n-1位和n位数集合数字之间的关系:

  • n-1位构造本身不论正序还是倒序,相邻之间都是差1,在反转后最高位补1;
  • 反转后,原先的最后一位会和自己相邻,在最高位补1后,差异恰好是1位;
  • 反转后,原先的第一位成为最后一位,在最高位补1后,最后一位和第一位恰好有1位不同。
代码语言:javascript
复制
from typing import List

def grayCode(n: int) -> List[int]:
    if n == 1:
        return [0, 1]
    pre_res = grayCode(n-1)
    res: list = []
    res = [(1<<(n-1)) + i for i in pre_res[::-1]]
    return pre_res + res


print(grayCode(2))  # [0, 1, 3, 2]

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档