算法:Gray Code 格雷码
题目
地址:https://leetcode.com/problems/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.
Example 1:
Input: 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2For a given n, a gray code sequence may not be uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence.00 - 0
10 - 2
11 - 3
01 - 1
Example 2:
Input: 0
Output: [0]
Explanation: We define the gray code sequence to begin with 0.A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.Therefore, for n = 0 the gray code sequence is [0].
Gray Code 图表
Decimal | Binary | Gray |
---|---|---|
0 | 0000 | 0000 |
1 | 0001 | 0001 |
2 | 0010 | 0011 |
3 | 0011 | 0010 |
4 | 0100 | 0110 |
5 | 0101 | 0111 |
6 | 0110 | 0101 |
7 | 0111 | 0100 |
8 | 1000 | 1100 |
9 | 1001 | 1101 |
10 | 1010 | 1111 |
11 | 1011 | 1110 |
12 | 1100 | 1010 |
13 | 1101 | 1011 |
14 | 1110 | 1001 |
15 | 1111 | 1000 |
遍历实现
package backtracking;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;// https://leetcode.com/problems/gray-code/
public class GrayCode {public static void main(String[] args) {GrayCode obj = new GrayCode();List<Integer> result = obj.grayCode(2);System.out.println(Arrays.toString(result.toArray()));}public List<Integer> grayCode(int n) {List<Integer> result = new ArrayList<>();for (int i = 0; i < (1<<n); i++) {result.add((i ^ i >> 1));}return result;}
}
代码下载
https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/GrayCode.java
参考
https://en.wikipedia.org/wiki/Gray_code
算法:Gray Code 格雷码相关推荐
- Gray Code(格雷码) C++多方法实现
简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...
- LeetCode Gray Code 格雷码
题意:提供一个数字n,代表二进制的个数,那么就有2的n次方个可能性了,从0到2^n-1.将其转成格雷码,再直接将二进制的格雷码按二进制的读法变成整数,装在vector容器中返回,要有序(否则你直接将0 ...
- 格雷码基础和生成的几种方法
1 格雷码: 1.1 格雷码引言: 在数字系统中,常要求代码按一定顺序变化. 在机器视觉里面,编码结构光也是按照一定的顺序进行变化,最常用的就是Binary,但是,二进制的纯粹的编码,由于二进制的进制 ...
- 结构光之格雷码编码加相移算法详解与实现(多种编码程序)
格雷码+相移法既可以减少格雷码的编码位数,加快解码速度,也可以弥补单纯的相移法和格雷码法的对不连续位置难以重建的缺点. 操作过程如下: 采用格雷码与相移结合的时间编码方法,具体的编码方法为:首先向被测 ...
- Java 算法 格雷码
目录标题 题目描述 解题思路 代码 题目描述 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格 ...
- 自然二进制数与格雷码的相互转换
自然二进制码与格雷码的相互转换 一.前言 二.自然二进制数转格雷码 2.1 自然二进制数转格雷码原理 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.格雷码转自然二进制数 ...
- 2018第九届蓝桥杯C/C++ B国赛 —— 第三题:格雷码
格雷码 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0 ...
- 2018届c++B 格雷码;调手表(lowbit运算)
3.标题:格雷码(填空题) 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见 ...
- gray code java_格雷码Gray Code详解
格雷码简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又 ...
- 【格雷码】LeetCode 89. Gray Code
LeetCode 89. Gray Code Solution1:我的答案 穷举法,比较笨 注意:牢记vector中find()函数的用法 class Solution { public:vector ...
最新文章
- String.Format格式说明
- 布线须知:机柜在数据中心机房的三个新用途
- spring-mvc springboot 使用MockMvc对controller进行测试
- Asp.Net页面生命周期(多图)
- 苯环的神经网络C6H6
- 人类一败涂地电脑版_热门游戏丨人类一败涂地云游戏来了! 咪咕快游独家正版上线!...
- 航海王_html_css3_旋转效果demo
- html header文件格式类
- Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿
- 宁波Uber优步司机奖励政策(12月14日到12月20日)
- mysql 即学a又学b_MySQL学习第一天
- LeetCode算法入门- Longest Common Prefix -day13
- python简单体育竞技模拟_python初体验 —— 模拟体育竞技
- 538.把二叉搜索树转换为累加树(结合自己的理解解释一下别人题解的递归部分)
- C语言之while和do-while
- 两个tplink路由器有线桥接_如何装2个tplink无线路由器_两个tplink路由器怎么设置?-192路由网...
- file和directory区别
- Linux下Oracle11G64位安装流程
- 【总结】PHP常见面试题汇总(一)
- 【fpdlink】FPDlink接口---TI954解串器功能分析