菜鸟的每日力扣系列——89. 格雷编码
2023-02-18 16:23:06 时间
题目中介绍的格雷码序列可能不太好理解,我这里画了一张1~3位格雷编码的图来更直观的看下它的生成过程。首先格雷编码的第一位是0,从一位开始是0和1;然后到两位时,先在一位的基础上补0,在最高位产生进位时在前面加个1;到三位时在两位的基础上补0,产生进位时在最高位补1。
另外,我们看箭头连起来的数据块是和上一次的数据除了最高位,其余部分是对称的关系,即可以将原序列反转后拼到最高位的后面。由此,本题可以转换为推导n-1位和n位数集合数字之间的关系:
- n-1位构造本身不论正序还是倒序,相邻之间都是差1,在反转后最高位补1;
- 反转后,原先的最后一位会和自己相邻,在最高位补1后,差异恰好是1位;
- 反转后,原先的第一位成为最后一位,在最高位补1后,最后一位和第一位恰好有1位不同。
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
相关文章
- 最近很火的ChatGPT怎么玩?
- 小巧好用的免费虚拟机软件
- [ChatGPT解决方案]生成 nginx 自签名证书
- 完美解决文件格式转换问题
- MariaDB在Oscar故障演练平台的测试实践
- 压缩列表的源码实现
- Docker命令三板斧
- 一文教你快速注册OpenAi(ChatGPT),国内也可以!
- npm自动改版本号+博客静态源代码自动上传
- 宝塔配置SSL证书
- React 组件库 CSS 样式问题分析
- 7个连环问揭开java多线程背后的弯弯绕
- 掌握Java的内存模型,你就是解决并发问题最靓的仔
- 基于ServiceStage的微服务开发与部署(二)
- es6扩展运算符、concat方法合并多个数组
- 【愚公系列】2022年12月 MAUI框架-在线课堂项目的环境配置
- springboot validated注解数据校验 异常处理
- 【经验分享】C51单片机中如何实现printf输出log?
- SpringBoot实战:整合MyBatis搭建基本骨架
- SpringBoot实战:整合MapStruct实现数据类型转化