Leetcode 中等:89.格雷编码

Python实现:生成格雷码(含完整源代码) 2)当n>1时,假设长度为n-1的格雷码已经生成,则长度为n的格雷码可以依次由长度为n-1的格雷码前加0和前加1得到。其中,前加0得到的n位格雷码与长度为n-1的格雷码一致,而前加1得到的n位格雷码需要把最高位从0变为1,再拼接上长度为n-1的反向格雷码即可。而在格雷码中,相邻的两个数只有一位不同,这使得格雷码的编码方式在数值变化时只需更改少量的位数,因此在一些应用场合下更为适用。本文将通过Python实现生成格雷码的过程,并附上完整源代码。n代表格雷码的长度,函数的作用是输出长度为n的格雷码。 阅读详情

题目:格雷编码

  • 题号:89
  • 难度:中等
  • https://leetcode-cn.com/problems/gray-code/

n 位格雷码序列 是一个由 $2^n$ 个整数组成的序列,其中:

  • 每个整数都在范围 $[0, 2^n - 1]$ 内(含 0 和 $2^n - 1$)
  • 第一个整数是 0
  • 一个整数在序列中出现 不超过一次
  • 每对 相邻 整数的二进制表示 恰好一位不同 ,且
  • 第一个 和 最后一个 整数的二进制表示 恰好一位不同

给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

示例 1:

输入:n = 2
输出:[0,1,3,2]
解释:
[0,1,3,2] 的二进制表示是 [00,01,11,10] 。
- 00 和 01 有一位不同
- 01 和 11 有一位不同
- 11 和 10 有一位不同
- 10 和 00 有一位不同

[0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01] 。
- 00 和 10 有一位不同
- 10 和 11 有一位不同
- 11 和 01 有一位不同
- 01 和 00 有一位不同

示例 2:

输入:n = 1
输出:[0,1]

示例 3:

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

提示:

  • 1 <= n <= 16

实现

雷格码

由 n 位推导 n+1 位结果时,n+1 位结果包含 n 位结果,同时包含 n 位结果中在高位再增加一个位 1 所形成的令一半结果,但是这一半结果需要与前一半结果镜像排列。

public class Solution
{
    public IList<int> GrayCode(int n)
    {
        IList<int> lst = new List<int>();
        lst.Add(0);
        for (int i = 1; i <= n; i++)
        {
            for (int j = lst.Count - 1; j >= 0; j--)
            {
                int item = lst[j] + (1 << i - 1);
                lst.Add(item);
            }
        }
        return lst;
    }
}

Python 语言

class Solution(object):
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        lst = [0]
        i = 1
        while i <= n:
            j = len(lst) - 1
            while j >= 0:
                item = lst[j] + 2 ** (i - 1)
                lst.append(item)
                j -= 1
            i += 1
        return lst
格雷码基础和生成的几种方法 1 格雷码: 1.1 格雷码引言: 在数字系统中,常要求代码按一定顺序变化。 在机器视觉里面,编码结构光也是按照一定的顺序进行变化,最常用的就是Binary,但是,二进制的纯粹的编码,由于二进制的进制关系(每个位是有权的),如果发生一个错码(在机器视觉里面,错码的发生可能是一个背景的干扰,也可能是测试物体的一个比较陡峭的轮廓变更),一个错码往往他的数字权重不是一位,比如二进制的最高为,错了一位,那么就是整个数值发生一半的变化。 去掉权重的好处就是,如果模拟量或者是采样的数据发生了一个微小的变化,在整 阅读详情

相关推荐

【中等】力扣算法题解析LeetCode89:格雷编码

格雷码序列是一种特殊的二进制编码,相邻数字仅有一位不同。本文介绍了一种高效生成n位格雷码序列的方法,利用公式 (i \oplus (i >> 1)) 直接计算每个格雷码值。该方法时间复杂度为 (O(2^n)),空间复杂度为 (O(2^n)),代码简洁高效。示例展示了n=2时的输出[0,1,3,2],并验证了其二进制表示的正确性。Java实现通过异或运算快速生成序列,适用于1≤n≤16的范围。

ylumwd的博客 889

格雷码(Gray Code)编码、实现及规律(附编码)

格雷码(Gray Code)是由贝尔实验室的弗兰克·格雷(Frank Gray,1887-1969)在20世纪40年代提出,并在1953年取得美国专利“Pulse Code Communication”。最初目的是在使用PCM(Pusle Code Modulation)方法传输数字信号的过程中降低错误可能。 定位控制是自动控制的一个重要内容。如何精确地进行位置控制在许多领域里面有着广泛的引用,例如机器人运动,数控机床的加工,医疗机械和伺服传动控制系统等。 编码器是一种把角位移或者是直线位移转换成电信号(脉

zhaogoudan的博客 1万+

LeetCode 第89题解析:格雷编码

通过上述详细的解析和多种解法的对比,相信大家对LeetCode第89题的解法有了深入的理解。本文介绍了递归法、位运算法和迭代法,每一种方法都有其优缺点。递归法思路清晰,但需要额外的空间来存储中间结果;位运算法利用位操作,直接计算格雷编码,高效简洁;迭代法通过逐步生成格雷编码序列,逻辑简单易懂。希望大家能够根据具体情况选择合适的解法,并灵活应用到其他类似的问题中。最后,希望大家在刷题的过程中,不断总结,不断进步。祝大家都能在算法的道路上走得更远!

Gemini的博客 292

【算法】格雷码(Gray Code)与8421二进制码之间的转换算法 (LeetCode89)

格雷码

qq_27198345的博客 1万+

C语言实现格雷码生成代码

此代码可生成格雷码并将其转换为格雷码对应的十进制数。

G2O (General Graph Optimization)入门及简单使用

g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。

晓晨的博客 1万+

leetcode:89. 格雷编码

题目解析 下表为0为、1位、2位、3位、4位格雷码的实例,我们可以发现这样一个规律。 总结规律: 1位格雷码有两个码字 (n+1)位格雷码中的前2^n个码字等于n位格雷码的码字,按顺序书写,加前缀0 (n+1)位格雷码中的后2^n个码字等于n位格雷码的码字,按逆序书写,加前缀1 n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1 根据这个规律就可以直接写代码了。 递归 class Solution { vector<int> helper(

OceanStar的博客 293

关于动态存储器dram中rank,bank,device之间的关系

DEVICE_WIDTH表示设备的带宽(单位bit),每个列(column)包含DEVICE_WIDTH 位(bit),每一行(row)包含NUM_COLS个column。   而每一个bank包含NUM_ROWS个行(row)。所以一个设备(device)的存储容量为PER_DEVICE_STORAGE =NUM_ROWS*NUM_COLS*DEVICE_WIDTH*NUM_BANKS (i

wyj7260的专栏 4731

LeetCode第89题_格雷编码

是一个由2^n02^n - 10给你一个整数n,返回任一有效的。

qq_40263592的博客 1274

ubuntu18.04安装R——无法连接上 dl.google.com:80 (6.6.6.6),连接超时&&E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

安装R的时候,sudo apt update 的时候出现错误: 查资料要修改/etc/apt/sources.list.d/google-chrome.list 文件 原来是: deb http://dl.google.com/linux/chrome/deb/ stable main 改为: deb [arch=amd64] http://dl.google.com/linux/chrom...

许希律的博客 4348

数字IC笔记-低功耗技术

传统的降低Power的方法主要有: 1.门控时钟技术(clock gating) 2.多阈值电压技术(MultiShreshold) 3.动态电压频率调节技术(DVFS) 目前有以下几种低功耗技术: 1.多电压技术(Multi-Voltage) 2.MTCOMS Power Gating 技术(多阈值功耗控制技术),比如基带部分中的2G、3G、CDMA、LTE等通过awake—>sleep—>awake的方式间歇式的打开或关断其电源,power gating 可以完全关掉dynamic的pow

sinat_41774721的博客 1932

【LeetCode】89. 格雷编码

本文介绍了n位格雷码的生成问题。格雷码要求相邻整数二进制表示仅一位不同,首尾也需满足这一条件。关键解法包括对称反射法和位运算公式法,时间复杂度均为O(2^n)。对称反射法通过递归构造n-1位格雷码并镜像反射,添加最高位实现;位运算公式则利用i^(i>>1)快速生成。文章详细分析了算法流程、复杂度、边界条件及常见错误,并提供了多种实现方式(递归/迭代)。典型示例展示了n=1时返回[0,1],n=2时返回[0,1,3,2]等有效序列。

qq_32019341的博客 1400

INMP441麦克风避坑指南:为什么你的I2S录音总有杂音?(附示波器调试技巧)

本文针对INMP441麦克风与ESP32等MCU通过I2S接口连接时常见的录音杂音问题,提供了一套系统的硬件调试指南。文章深入剖析了电源纹波、信号完整性、接地环路及时钟抖动四大噪声根源,并详细讲解了如何使用示波器进行逐层排查,给出了增加LC滤波、串联阻尼电阻、优化布局布线等切实可行的解决方案,帮助开发者从根本上提升音频质量。

k0l1m2n3o的博客 1021

LeetCode 89. 格雷编码

文章目录1. 题目信息2. 解题 1. 题目信息 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列并不唯一。 例如,[0,2,3,...

Michael是个半路程序员 1225

MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

本示例展示了如何利用非线性模型预测控制(MPC)为四旋翼飞行器设计一个跟踪轨迹的控制器。

机器人控制与仿真应用 4432

【系统架构设计师】十、统一建模语言UML(基本概念|UML2.0|SysML)

UML 2.0 提供了 14 种图,分别是类图、对象图、用例图、序列图、通信图(协作图)、状态图、活动图、构件图(组件图)、部署图、制品图、组合结构图、包图、交互概览图和计时图(定时图)。序列图、通信图、交互概览图和计时图均被称为交互图。 系统建模语言(SysML)是一种通用图形建模语言,用于指定,分析,设计和验证可能包括硬件,软件,信息,人员,程序和设施的复杂系统。特别是,该语言提供了图形表示,其具有用于建模系统需求,行为,结构和参数的语义基础,用于与其他工程分析模型集成。

帅次的博客 2520

力扣89——格雷编码

原题 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列并不唯一。 例如,[0,2,3,1] 也是一个有效的格雷编码序列。 00 -...

death05的博客 1256

光学防抖OIS介绍与标定

前言:先看一下有无ois系统的效果。 1. OIS系统的作用就是消除镜头的抖动。 Gyro感受方向,Hall感受位移,Actuator驱动马达来矫正抖动方向和位移。 2.ois系统的结构构成 从上面来看ois系统主要有Hall,...

camerall 1万+

Java实现 LeetCode 89 格雷编码

89. 格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列并不唯一。 例如,[0,2,3,1] 也是一个有效的格雷编码序列。 ...

南 墙 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode 89.格雷编码

leetcode 89. 格雷编码 题目描述 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 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

小白的成长 293

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

力扣第89题 格雷编码

格雷编码序列是一个二进制数字序列,其中的每两个相邻的数字只有一个二进制位不同。给定一个整数n,表示格雷编码的位数,要求返回n位的格雷编码序列。n = 2n = 2n = 3n = 3nn1nG(n)G(n+1)G(n+1)G(n)G(n+1)G(n)1n = 1[0, 1]n = 2Gkk⊕k>>1其中,k是当前的数字,k>>1是k右移一位,k⊕k>>1是k与右移后的k进行按位异或操作。使用该公式可以快速生成格雷编码序列。

weixin_48941116的博客 1123

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode-89、格雷编码-中等

LeetCode-89、格雷编码-中等 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入:2 输出:[0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的n,其格雷编码序列并不唯一。 例如,[0,2,3,1...

clover_my的博客 115

LeetCode [89]格雷编码

LeetCode [89]格雷编码题目描述题目分析源码改进改进代码分析难点 题目描述 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: 输入: 2 输出: [0,1,3,2] 解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列...

Astronote的博客 242

LeetCode89-格雷编码

哇,早上起来一看CCF的分数 心情立马由开心跌倒了谷底 什么操蛋的玩意儿 我只有190分 我不信我不信我不信 哎 牢骚过后还是得老老实实干活儿! 今天一定要买块蛋糕安慰自己 89-格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1: ...

飞奔的菜猪的博客 252
上一篇: Leetcode 中等:78. 子集
下一篇: Leetcode 中等:95. 不同的二叉搜索树II
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程小助手_Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值