Gray Code,求格林码
问题描述:
The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:
00 - 0
01 - 1
11 - 3
10 - 2
算法分析:首先要明白什么是格林码。给定n,格林码就有2^n个,前面一半是n-1的格林码,后面一半是n-1的格林码的逆序加上1<<(n-1)得到的相邻格林码二进制位只差一位。利用递归即可求解。
1位格雷码有两个码字
(n+1)位格雷码中的前2^n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2^n个码字等于n位格雷码的码字,按逆序书写,加前缀1。
由于是二进制,在最高位加0跟原来的数本质没有改变,所以取得上一位算出的格雷码结果,再加上逆序添1的方法就是当前这位格雷码的结果了。
n = 0时,[0]
n = 1时,[0,1]
n = 2时,[00,01,11,10]
n = 3时,[000,001,011,010,110,111,101,100]
public class GrayCode
{
public List<Integer> grayCode(int n)
{
if(n == 0)
{
List<Integer> res = new ArrayList<>();
res.add(0);
return res;
} List<Integer> res = grayCode(n-1);
int addNumber = 1 << (n-1);//得到二进制数的十进制
for(int i = res.size() - 1; i >=0; i --)
{
res.add(res.get(i)+addNumber);
}
return res;
}
}
Gray Code,求格林码的更多相关文章
- LeetCode OJ:Gray Code(格林码)
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- LeetCode:Gray Code(格雷码)
题目链接 The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...
- leetCode 89.Gray Code (格雷码) 解题思路和方法
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- c++实现gray code(格雷码)
今天别人问的一道题,强调用分治法实现 =.= 百度了一下格雷码,然后写了一下. 关于格雷码大家看百度的吧,特别详细,贴个图: 代码如下(header_file.h是我自己写的一个头文件,包括常见的ve ...
- [LeetCode] Gray Code 格雷码
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- 格雷码Gray Code详解
格雷码简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.格 ...
- 格雷码(Gray code)仿真
作者:桂. 时间:2018-05-12 16:25:02 链接:http://www.cnblogs.com/xingshansi/p/9029081.html 前言 FIFO中的计数用的是格雷码, ...
- [LeetCode] 89. Gray Code 格雷码
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- QAM格雷码映射的规则(Gray Code Mapping in QAM)
高阶调制(QAM,MQAM)信号中做基带映射,格雷码作为一种规范的映射规则,加上I,Q方向上相邻两个星座点对应的Bit_Cluster中只有一个Bit不同,所以有方便统一的特性. 以16QAM为例,先 ...
随机推荐
- 【非root用户】安装【python,pip,package】
安装python: 下载源码 解压 进入 ./configure --prefix=/path/python3.6 注意一定要设置prefix,否则默认安装到/usr/local make make ...
- matrix---简单dp,边界边界-_-
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569 简单dp,恶心的边界处理,无语: if((i+j)%2==1) dp[i][j]=a[i-1][ ...
- Travel---hdu5441(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:是有n个城市,m条边包含u v w:代表u到v的时间是w: 给q的时间x,求在x时间内Ja ...
- mutex_lock
多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理. mutex_lock(struct mutex *lock)和mute ...
- macOS 上安装 PECL
一.简介 PECL(The PHP Extension Community Library)是 PHP 扩展的存储库,为 PHP 所有的扩展提供提供托管和下载服务. 通过 PEAR(PHP Exten ...
- Oracle 通过undo块查看事务信息(转)
数据库版本:Oracle 11.2.0.3 RAC 实验目的:通过undo块查看Oracle事务信息 实验细节:1 开始一个事务SQL> select * from t1; ID NAME- ...
- 草稿:SCADA全局底层框架架构
一:全局基于单文档MFC程序开发. 二:全局每个功能模块之间完全隔离, 模块之间的数据交流必须使用主板模板. 三:每个功能块全部都自己的线程,除了PLC功能块 其他都是窗口线程 四:各个功能命名的前缀 ...
- vim中快速定位到某行以及快捷删除多行
vim filename 在命令行中直接输入 numberG 比如 100G直接定位到100行 输入 :set number即显示行号 : i,.d删除从第i行到目前所在行内容
- [Windows Powershell]-学习笔记(4)
Powershell 定义变量 在powershell中变量名均是以美元符"$"开始,剩余字符可以是数字.字母.下划线的任意字符,并且powershell变量名大小写不敏感($a和 ...
- 基于HTML5 FileSystem API的使用介绍(转)
FileSystem提供了文件夹和文件的创建.移动.删除等操作,大大方便了数据的本地处理, 而且所有的数据都是在沙盒(sandboxed)中,不同的web程序不能互相访问,这就保证了数据 的完整和安全 ...