leetcode NO.84 格雷编码 白痴讲解 腾讯精选练习50

本文深入解析格雷编码的概念,阐述其在二进制数系统中的特性,即两个连续数值仅有一位差异。通过实例说明,如n=3时格雷编码的形成过程,并提供Python代码实现格雷编码的生成算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
举报了,本来写的好好的,突然没了,什么辣鸡编译器。
今天这个题目不太好懂,看了好几个blog我才看懂是什么,我先来解释一下
关键在于多读几遍这个句,格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异
首先题目给的n是指二进制数的位数
比如说
n = 0 对应 None
n = 1 对应 0 1
n = 2 对应 00 01 11 10
n = 3 对应 000 001 011 010 110 111 101 100
也就是二进制数里面有多少个01组成由n决定
两个连续的数值仅有一个位数的差异的意思是
比如 n = 3 的情况
000-001 只在第三位不同,一个是0,一个是1
001-011 只在第二位不同,一个是0,一个是1

101-100 只在第三位不同,一个是1,一个是0
OK这样我们就把题目读懂了。

n = 0 对应 None
n = 1 对应 0 1
n = 2 对应 00 01 11 10
n = 3 对应 000 001 011 010 110 111 101 100
我们可以看到这样一个规律
在这里插入图片描述
n = 2时,只需要把n = 1时的0 1镜像反射形成0 1 | 1 0,然后在镜像形成的那部分的数的前面添上1就可以了,也就是0 1 | 11 10,为了保持位数相同给左边的数添零,变成 00 01 | 11 10
这个过程如果用编程的语言来实现,可以这样
在这里插入图片描述在这里插入图片描述
用这两个操作就可以
<< 左移符号,即在二进制表示后加一位 0,比如1<<1 = 2 (1->10=2)
x | 1<<n-1 就是在十进制数字 x 的二进制前面加一位1之后的十进制结果,因为n是位数,n -1 即为1后面添0的个数,比如 x = 1,有 1 | 10 = 11 (01和10对应位数的位置有1,结果就为1,01|10 = 11)

class Solution:
    def grayCode(self, n: int) -> List[int]:
        result = [0]
        for i in range(n):
            result.extend([x|1<<i for x in result[::-1]])
        return result

这里貌似只能用extend,不能用append,append里面的括号貌似不能用for

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值