两种思路,详情请参考新博文地址:[leetcode]Gray Code
http://oj.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.
For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:
00 - 0
01 - 1
11 - 3
10 - 2
Note:
For a given n, a gray code sequence is not uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
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
Note:
For a given n, a gray code sequence is not uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
格雷码, 提示中称:[0,2,3,1]也是一组合法的格雷码,把我彻底搞糊涂了,既然如此,为什么要返回[0,1,3,2]而不能返回[0,2,3,1]呢?后来手贱去百度了一下格雷码。尼玛....
看下格雷码的特征:
n == 1时,[0,1]
n == 2时,[00,01,11,10]
n == 3时,[000,001,011,010,110,111,101,100]
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
前后两部分的后n - 1位是对称的。
知道定义之后,代码就很简单了
public ArrayList<Integer> grayCode(int n) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0); if (n <= 0) { if(n == 0)return list; else return new ArrayList<Integer>(); } list.add(1); for (int i = 1; i < n; i++) { ArrayList<Integer> newList = new ArrayList<Integer>(); for (int j = 0; j < list.size(); j++) { newList.add(list.get(j)); } for (int k = list.size() - 1; k >= 0; k--) { newList.add((int) Math.pow(2, i) + list.get(k)); } list = newList; } return list; }
相关推荐
java java_leetcode题解之Gray Code.java
python python_leetcode题解之089_Gray_Code
javascript js_leetcode题解之89-gray-code.js
c语言基础 c语言_leetcode题解之0089_gray_code.zip
颜色分类leetcode 格雷码结构光重建 使用投影仪和相机重建 3D 场景 这个 repo 使用投影仪和相机来扫描场景并创建 3D 模型。 为了实现这一点,结构光图案被投射到场景上。 这是用相机捕获以确定密集对应关系。 该存储...
# [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...
Gray code/ Circular To do 加入Google Test, 学习并掌握test driven development 的工作模式 Solution 使用visual studio code 写C++ 怎么样才能正确地引用其他文件的函数 答(ref:): 因为g++不会正确的编译其他的...
- **2.1.19 Gray Code** - 生成格雷编码序列。 - 实现思路:基于位运算的规律。 - **2.1.20 Set Matrix Zeroes** - 给定一个m x n的矩阵,如果某个元素为0,则将其所在行和列的所有元素设为0。 - 实现思路:...
gas station leetcode leetcode 为了更好地检索以及归纳 *只是leetcode的会员题,没什么特殊含义。。 [] [BFS] [Two Pointer] [快慢] Prefix [89. Gray Code] [奇技淫巧]
解法一:循环生成数组结果,倒序遍历已有的格雷码加上偏移量即可扩充格雷码位数vector<int> grayCode(int n) {执行结果:执行用时 : 4
gray code 二分查找 序列号 题目名称 题目难点 162 树的问题 序列号 题目名称 题目难点 297 leet code 序列号 题目名称 题目难点 33 搜索旋转排序数组 要求O(logN),同时数组是个旋转数组 34 在排序数组中查找元素的...
#Gray code 12/29/2015 今天我将用两种解决方案来解决格雷码问题。 一个是preve bit '1',另一个是DFS。 力码 下面是我对 LeetCode 问题的解决方案的总结。 每个问题的主要思想通常可以在相应源文件的开头找到。 我...
233 Gray Code 565 234 Permutations 567 235 Permutations II 571 236 Permutation Sequence 573 237 Generate Parentheses 575 238 Combination Sum 577 239 Combination Sum II 579 240 Combination Sum III 581 ...
转换二进制到格雷码可以用公式`GrayCode = Binary ^ (Binary >> 1)`,而格雷码到二进制可以通过逐位比较并递归计算。例如,Q89题就涉及到了格雷编码的转换。 此外,数论还涉及到一些实用技巧,如在Q136题中,通过...
格雷编码(Gray Code),又称格雷码或反射码,是一种二进制数字系统,它的特点是任意两个相邻的数值之间只有一个位元的差异。这种编码方式在数据传输、编码电路设计以及计算机科学的多个领域都有广泛的应用,因为它...
另一种方法是使用位操作,如上述 `Solution` 类中的 `grayCode` 函数所示。这个函数首先创建一个长度为 \(2^n\) 的数组 `ans` 并初始化为全 0,然后遍历从 1 到 \(2^n - 1\) 的所有整数。对于每个 i,将 i 右移一位...
格雷编码(Gray Code),又称格雷码或格雷二进制码,是一种特殊的二进制数字系统。在格雷编码中,两个连续的数值之间仅有一位数字不同,这使得它在数据传输、编码设计以及计算机科学的多个领域中有广泛应用。本篇...