美文网首页
89. Gray Code 格雷码

89. Gray Code 格雷码

作者: sarto | 来源:发表于2022-04-28 09:48 被阅读0次

题目

给定一个整数 n,返回 2 的 n 次幂的序列,使得这个序列满足格雷码。
格雷码的特点是,将这些数字分解为二进制整数,这些二进制数之间,两两仅有 1 位不同。
格雷码通常用于数电转换,因为在数电转换期间,不可能几位同时变化,就可能出现中间码,导致一些错误情况,使用格雷码能避免这种错误。
所以该题目就是要求给出一种 n 位格雷码生成算法。

解析

!根据格雷码的规律,提出按位反向格雷码。

  1. 我们先生成 1 位格雷码
    [0]
    [1]
  2. 因为一位格雷码是满足两两相差1位的,对于2位格雷码,我们只需要保证高位不变,然后顺序反向复制低位,即可保证新生成的码连接上前一个也是格雷码。

    [00]
    [01]
    [11] -> 复制 [01]
    [10] -> 复制 [00]
  3. 同理,推三位格雷码
    [110]
    [111]
    [101]
    [100]

将这个思路转换成代码,一代一代的生成,一共需要生成 n 代,每一代的个数是 2^(n-1) 个数

伪代码

gn = [2^n]int
gn[0] = 0
gn[1] = 1
for nb=2;i<n;nb++
  num =  1<< (nb-1)
  for i=0;i<num;i++
    gn[num+i] = num | gn[num-i-1]
return gn

代码

func grayCode(n int) []int {
    gn := make([]int, 1<<n)
    gn[0] = 0
    gn[1] = 1
    for g:=2;g<=n;g++ {
        num := 1<<(g-1)
        for i:=0;i<num;i++ {
            gn[num+i] = num | gn[num-i-1]
        }
    }
    return gn
}
image.png

相关文章

  • 89. Gray Code 格雷码

    题目 给定一个整数 n,返回 2 的 n 次幂的序列,使得这个序列满足格雷码。格雷码的特点是,将这些数字分解为二进...

  • 89. Gray Code/格雷编码

    The gray code is a binary numeral system where two succes...

  • Verilog——格雷码计数器

    - 格雷码(Gray code):​ 第一次接触格雷码是在本科的数电课本上,其在可靠性编码占据重要位置...

  • 生成组合对象之二进制反射格雷码(c++)

    binary reflected Gray code 二进制反射格雷码 伪代码描述 难点 在我看来这里的难点主要是...

  • [Math]89. Gray Code

    分类:Math 时间复杂度: O(n) 空间复杂度: O(n) 89. Gray Code The gray co...

  • 格雷码与二进制之间的转换

    1 二进制转换为格雷码 module bin_to_gray(bin,gray); parameterSIZE =...

  • 89. Gray Code

    这题做的很虚, 嗯,居然过了 题目中的一种做法的复现: 打死我吧,打死我我可能会想出来这种办法

  • 89. Gray Code

    题目描述:给非负整数 n 表示二进制位数,输出所有的 n 位格雷码,以0开始。 分析:时间复杂度O(2^n),空间...

  • 89. Gray Code

  • 89. Gray Code

    i = i^(i/2) 别问我咋的出来的, 不知道。。。

网友评论

      本文标题:89. Gray Code 格雷码

      本文链接:https://www.haomeiwen.com/subject/vxbryrtx.html