[LeetCode]Gray Code
2015-12-08 15:45
260 查看
题目描述:
he 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
code sequence is:
解题思路:
在做这道题之前,需要了解什么是Gray Code。Gray Code 即格雷码,在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray
Code)。格雷码有两种转换方法:
1、递归生成码表:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
2、异或转换:
二进制码→格雷码(编码):
此方法从对应的n位二进制码字中直接得到n位格雷码码字,步骤如下:
对n位二进制的码字,从右到左,以0到n-1编号
如果二进制码字的第i位和i+1位相同,则对应的格雷码的第i位为0,否则为1(当i+1=n时,二进制码字的第n位被认为是0,即第n-1位不变)
公式表示:
(G:格雷码,B:二进制码)
因此,采用异或转换的方式实现二进制码到格雷码的转换:
he 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
解题思路:
在做这道题之前,需要了解什么是Gray Code。Gray Code 即格雷码,在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray
Code)。格雷码有两种转换方法:
1、递归生成码表:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
2、异或转换:
二进制码→格雷码(编码):
此方法从对应的n位二进制码字中直接得到n位格雷码码字,步骤如下:
对n位二进制的码字,从右到左,以0到n-1编号
如果二进制码字的第i位和i+1位相同,则对应的格雷码的第i位为0,否则为1(当i+1=n时,二进制码字的第n位被认为是0,即第n-1位不变)
公式表示:
(G:格雷码,B:二进制码)
因此,采用异或转换的方式实现二进制码到格雷码的转换:
public List<Integer> grayCode(int n) { List<Integer> result=new ArrayList<Integer>(); int size=1<<n; for(int i=0;i<size;i++){ int num=i^i>>1;//异或实现 result.add(num); } return result; }
相关文章推荐
- android——ObjectAnimator动画(一)
- ubuntu开机自动登陆
- java实现自动发邮件并携带附件
- EditText属性大全
- 一招制敌 - 玩转 AngularJS 指令的 Scope (作用域)
- mybatis foreach
- Minimum Depth of Binary Tree
- Python3.4 邮件(包含附件与中国)
- 电脑黑屏进入节电模式解决办法
- Spinner下拉列表控件
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- DAS, SAN, NAS 和IPSAN
- Spring3 -- IOC简单介绍 01
- 中关村,舌头
- [转]Entity Framework教程(第二版)
- Spring事务配置的五种方式
- Cocoa Touch事件处理流程--响应者链
- Jsp入门实战上
- 详解PHP的Yii框架中日志的相关配置及使用
- 【Android】【USB】USB相关开发