什么是格雷码?

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。

现要求,给定一个整数n,请返回n位的格雷码,顺序从0开始。

那我们现在来列一下n位的格雷码:
(1)n=1

0
1

(2)n=2

00
01
11
10

(3)n=3

000
001
011
010
100
111
101
100

我们把这三组数放在一起对比一下:

n=1时格雷码为:0 ,1
n=2时格雷码为:00 ,01, 11, 10
n=3时格雷码为:000 ,001 ,011 ,010 ,100 ,101 ,111 ,110

可以发现:
(1)位数为n的格雷码数组大小为 n^2
(2)除了最高位,格雷码的位元上下完全对称,且这个数是位数n-1的格雷码。只需要在前一个格雷码的基础上按情况加上0和1即可。

我们把位数为n-1的格雷码数组叫做前驱数组。
上下对称:即数组中第 i 个元素第(arr.length-i-1)个元素,除过最高位,他们都是前驱数组的第i个元素,再将第i个元素最高位置为0,第(arr.length-i-1)个元素最高位置为1 。

到这,我们解题就很清楚了,使用递归,位数为n的格雷码用位数n-1的格雷码计算,递归的出口为n=1。

代码:

public static String[] getGray(int n){//先创建数组int size = (int)Math.pow(2,n);String[] arr = new String[size];if(n == 1){arr[0] = "0";arr[1] = "1";return arr;}//n-1时的数组String[] pre = getGray (n-1);for(int i = 0;i < pre.length;i++){arr[i] = "0" + pre[i];arr[arr.length-1-i] = "1" + pre[i];}return arr;}

递归实现格雷码GrayCode相关推荐

  1. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码

    一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...

  2. java 递归生成格雷码_格雷码的递归生成

    问题:产生n位元的全部格雷码.html 格雷码(Gray Code)是一个数列集合,每一个数使用二进位来表示,假设使用n位元来表示每一个数字,任两个数之间只有一个位元值不一样. 例如如下为3位元的格雷 ...

  3. 格雷码基础和生成的几种方法

    1 格雷码: 1.1 格雷码引言: 在数字系统中,常要求代码按一定顺序变化. 在机器视觉里面,编码结构光也是按照一定的顺序进行变化,最常用的就是Binary,但是,二进制的纯粹的编码,由于二进制的进制 ...

  4. FPGA学习笔记---二进制码、独热码、格雷码分析对比

    在Verilog学习中常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码,对于新手来说,搞不清楚编码为什么要分这么多格式?统一用一种格式不好吗? ...

  5. 二进制码、格雷码、独热码的区别

    格雷码 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循 ...

  6. Verilog-状态机编码方式对比:独热码 vs 格雷码

    博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...

  7. 2016校招腾讯研发岗笔试题---递归法求解格雷码

    题目:一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码( Gray Code ).请编写一个函数,使用递归方法生成 N 位的格雷码. 测试输入输出如下 输入:1 输出:[ ...

  8. 减治法在生成子集问题中的应用(JAVA)--递归、二进制反射格雷码

    减治法在生成组合对象问题中的应用 生成子集问题:经典的背包问题就是求解一个最优子集的问题,这里我们来讨论一个更简单的问题.对于任意一个集合来说,它都存在2^n个子集(一个集合所有的子集集合称为幂集). ...

  9. 4位格雷码的顺序编码_格雷码那点事——递归非递归实现

    简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...

最新文章

  1. 如何在CPU上优化GEMM(上)
  2. 1万粉的小红书kol报价_小红书母婴博主资源怎么找?小红书母婴种草软文撰写技巧分享!...
  3. Django入门(七)   django的缓存
  4. Nearest Interesting Number
  5. Bootstrap组件_导航条(默认样式的导航条,品牌)
  6. 文本监控 :oninput onchange onpropertychange 的区别
  7. Ubuntu16.04下面spyder切换虚拟环境下面的python版本
  8. 纽约时代广场广告费才7千元每天,花钱装逼值不值?
  9. 在Spring MVC Web应用程序中添加社交登录:集成测试
  10. 第二章 Burp Suite代理和浏览器设置
  11. 南师大632c语言程序设计,单片机c语言学习心得632.docx
  12. 扫地机器人开机充电还是关机充电器_新手机是开机充电好,还是关机充电好,老司机告诉你...
  13. css权威指南第四版_16个非常有用的CSS伪选择器,你千万不要错过了!
  14. 高中计算机网络功能,高中生自我教育中如何发挥计算机网络信息的作用
  15. while循环中使用read读取变量的一点小技巧
  16. 经过事件还是箭头 html,箭头函数不合适什么场景?
  17. 凸优化和非凸优化的区别
  18. win下激活python虚拟环境及激活失败解决方案
  19. Facebook 全面禁止口罩广告,各平台如何打击哄抬、售假
  20. python分时间段统计_Python Pandas:按日期分组并统计每个时段的新记录

热门文章

  1. orc表导致hiveserver2内存暴涨问题分析
  2. 通过JAVA编写一个简单的雇员管理系统小项目
  3. 高举高打快速渗透77个国家,雅迪电动能成为两轮界的“华为”吗?
  4. HTML DOM-->键盘事件:keydown/keyup/keypress
  5. 深度测试: LayaAir H5游戏引擎裸跑性能超越Unity3D
  6. 关于怎样做一个不会被检测的点击脚本教程
  7. 新角度解读C++内联函数的前世今生(上)(详细必看)
  8. 2022-10-29 工作记录--JS-获取到26个英文大写字母和26个英文小写字母
  9. 计算机 原码 反码 补码
  10. python print end报错_python中print()函数的用法和end=不换行详解