LeetCode 89. 格雷编码 Python 一行代码解法_枚举格雷码-程序员宅基地

技术标签: LeetCode  

题目:

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。

示例 1:

输入: 2
输出: [0,1,3,2]
解释:
00 - 0
01 - 1
11 - 3
10 - 2

对于给定的 n,其格雷编码序列并不唯一。
例如,[0,2,3,1] 也是一个有效的格雷编码序列。

00 - 0
10 - 2
11 - 3
01 - 1
示例 2:

输入: 0
输出: [0]
解释: 我们定义格雷编码序列必须以 0 开头。
给定编码总位数为 n 的格雷编码序列,其长度为 2n。当 n = 0 时,长度为 20 = 1。
因此,当 n = 0 时,其格雷编码序列为 [0]。

分析

n位的格雷码可以由n-1位的格雷码获得

一位格雷码:0,1

两位格雷码:00,01;11,10

三位格雷码:000,001,011,010;110,111,101,100

四位格雷码:0000,0001,0011,0010,0110,0111,0101,0100; 1100,1101,1111,1110,1010,1011,1001,1000

通过上面的枚举可以发现,格雷码的实现其实是一个递归过程

例如三位格雷码的前四位是把两位格雷码按从左到右的顺序在每一个格雷码前面加0实现的,后面四位是把两位格雷码按照从右到左的顺序在每一位格雷码前面加一实现的,大家按照这个方法推一下格雷码,应该能理解这段话的意思。

此外在前面加0,格雷码对应的值不会改变,前面加一会让各类码的值增加2^(n-1),n为格雷码的位数

代码

class Solution(object):
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """ 
        return [0] if n == 0 else self.grayCode(n-1) + [x+(1<<(n-1)) for x in reversed(self.grayCode(n-1))]
                
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Arry_Lee/article/details/83795447

智能推荐

“SecureCRT遇到一个致命的错误且必须关闭”处理办法_an error occured while patching the file(s)!-程序员宅基地

文章浏览阅读2.6k次。打开SecureCRT时报错:SecureCRT遇到一个致命的错误且发须关闭。一个崩溃转储文件已创建于...解决办法是,如下在cmd中输入regedit回车打开注册表编缉器展开HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\找到包含“VanDyke”字眼的那些文件夹(有时只有VanDyke一个有时有几个)在其上点击右键选择全删掉,然后重新双击启..._an error occured while patching the file(s)!

Rational Rose、PowerDesign、visio这三个软件的功能与异同[转帖]-程序员宅基地

文章浏览阅读830次。作者:ebizs ROSE是直接从UML发展而诞生的设计工具,它的出现就是为了对UML建模的支持,ROSE一开始没有对数据库端建模的支持,但是在现在的版本中已经加入数据库建模的功能。ROSE主要是在开发过程中的各种语义、模块、对象以及流程,状态等描述比较好,主要体现在能够从各个方面和角度来分析和设计,使软件的开发蓝图更清晰,内部结构更加明朗(但是它的结构仅仅对那些对掌握UML的开发人员,也..._比powerdesigner好用的软件

php中提示注意怎么解决,PHP中操作MySQL时一定要注意-程序员宅基地

文章浏览阅读53次。恍惚恍惚又来到了文章的学习,想必大家又有很多问题吧!对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但……没有完全绝对的事,在这儿也是一样,当一行 MySQL **入在 PHP 代码中时,最好把后面的分号省略掉.例如mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$fir..._php 不提示注意

Redis从入门到精通(二十)Redis最佳实践(一)优雅的Key结构、拒绝BigKey

分析RDB快照文件,全面分析内存使用情况。,在raw模式下内存空间不是连续的,而是采用一个指针指向了另外一段内存空间,访问的时候性能也就会受到影响,还有可能产生内存碎片。假设有一个hash类型的Key,其有10万对field和value,field是自增id,那这个Key存在什么问题?:对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢;BigKey内存占用较多,删除这样的Key也需要耗费很长时间,从而导致Redis主线程阻塞,引发一系列问题。

UltraEdit-文本编辑器Mac绿色版-程序员宅基地

文章浏览阅读454次。前言更多内容,请访问我的 个人博客。简介:Ultraedit是一款在Windows系统中非常出名的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代其他文本工具,同时还支持许多开发语言,如 C, Objective C, Javascript, XML, PHP, Perl, Python等,并可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。功能特点:可..._ultraedit编辑mac地址

vue @click 绑定的函数,传入事件对象和自定义参数_vue @click 自定义参数-程序员宅基地

文章浏览阅读2k次。1.仅传入自定义参数html:<div id="app"> <button @click="tm(123)">ddddd</button></div>js:new Vue({ el:'#app', methods:{ tm:function(e){ console.log(e); //会输出 123 } }})2.仅传入事件对象html:<div id="app_vue @click 自定义参数

随便推点

ssm/php/node/python人脸识别考勤系统-程序员宅基地

文章浏览阅读796次,点赞20次,收藏17次。人脸识别考勤系统的引入,简化了考勤流程,员工无需携带卡片或记忆密码,只需面对摄像头即可完成考勤,这无疑提高了考勤的便捷性,节省了宝贵的时间。再者,系统的实施有助于企业构建起更加科学和规范的考勤管理体系,通过对考勤数据的分析,企业可以更好地掌握员工的工作状态和规律,从而优化人力资源配置,提高整体工作效率。人脸识别考勤系统还具有较强的扩展性和兼容性,能够与企业的其他管理系统如门禁、薪资等无缝对接,形成一体化的管理平台,进一步提升企业的信息化管理水平。: 流行的开源关系型数据库管理系统,用于存储和检索数据。

Python编程实现sinx函数(泰勒公式)_python编写一个能使用麦克劳林级数求正弦函数值的小程序。-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏39次。本文写的代码没有调用任何一个数学函数,都是手写的代码实现的所有的功能,小伙伴们可以根据自己的需求是当选取QAQ#阶乘函数def r(a): sum=1 for i in range(1,a+1): sum*=i return sum#幂函数def s(x,t): m=1 i=1 while i<=..._python编写一个能使用麦克劳林级数求正弦函数值的小程序。

web测试-程序员宅基地

文章浏览阅读432次。项目的测试流程大只包含的几个阶段:立项、需求评审、用例评审、测试执行、测试报告文档一、立项后测试需要拿到的文档1、需求说明书2、原型图(及UI图)3、接口文档4、数据库字典(表的数量、缓存机制)二、需求评审参加人员:开发、测试及需求人员,由需求人员主持讲解。为了会议的有效举行,测试及开发人员需要在会议开始之前熟悉需求文档及原型,将有疑问 的点标注出来在会议...

H5定位问题-程序员宅基地

文章浏览阅读681次。写在最前面HTML5 Geolocation API 用于获得用户的地理位置。鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。如:目前常见的坐标系有三种:地球坐标(WGS84,国际公认坐标),火星坐标(GCJ02,国家标准,适用于高德百度地图大陆+港澳部分、Google地图大陆部分),百度坐标(BD09,适用于百度地图大陆+港澳台部分)。我们通过浏览器所在硬件设备..._微信内置浏览器h5定位使用的是什么坐标系

c语言与linux变量,从汇编来看C语言之变量-程序员宅基地

文章浏览阅读89次。1、基础研究对如图程序进行编译连接,再用debug加载。我们在偏移地址1fa处查看main函数的内容:执行到1fd处,发现n的偏移地址为01a6,段地址存储在ds寄存器里,为07c4.再查看函数f2:参数a、b的值是用栈来传递的,它们的段地址都存放在ss寄存器中:局部变量c的值在这里是用si寄存器存储的,因为c正好是int型,那么子函数里定义的局部变量是用寄存器存储吗?我们在这里加一条赋值语句看看..._c语言的f3函数

python中字符串转xml对象_Python实现对象转换为xml的方法示例-程序员宅基地

文章浏览阅读1.7k次。本文实例讲述了Python实现对象转换为xml的方法。分享给大家供大家参考,具体如下:# -*- coding:UTF-8 -*-'''''Created on 2010-4-20@author: 忧里修斯'''import xml.etree.ElementTree as ETimport xml.dom.minidom as minidomfrom addrbook.dom..._python 字符串转xml

推荐文章

热门文章

相关标签