问题描述:
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.
原问题链接:https://leetcode.com/problems/gray-code/
问题分析
这个问题如果结合gray code的定义来看,它其实有一个规律。就是如果我们要定义的gray code是n位的,那么最终出来的所有编码有2 ** n个。所以一种思路就是给定一个数字n,从0到 2 ** n遍历,然后求每个数字的gray code转换,将转换后的代码放入列表中就可以了。
而对于每个数字的gray code编码其实就是一个如下的运算:
i ^ (i >> 1)。
所以可以很容易得到如下的代码:
public class Solution { public List<Integer> grayCode(int n) { List<Integer> list = new LinkedList<>(); for(int i = 0; i < (1 << n); i++) { list.add(i ^ (i >> 1)); } return list; } }
参考材料
https://en.wikipedia.org/wiki/Gray_code
相关推荐
java java_leetcode题解之Gray Code.java
Gray code/ Circular To do 加入Google Test, 学习并掌握test driven development 的工作模式 Solution 使用visual studio code 写C++ 怎么样才能正确地引用其他文件的函数 答(ref:): 因为g++不会正确的编译其他的...
gas station leetcode leetcode 为了更好地检索以及归纳 *只是leetcode的会员题,没什么特殊含义。。 [] [BFS] [Two Pointer] [快慢] Prefix [89. Gray Code] [奇技淫巧]
#Gray code 12/29/2015 今天我将用两种解决方案来解决格雷码问题。 一个是preve bit '1',另一个是DFS。 力码 下面是我对 LeetCode 问题的解决方案的总结。 每个问题的主要思想通常可以在相应源文件的开头找到。 我...
python python_leetcode题解之089_Gray_Code
颜色分类leetcode 格雷码结构光重建 使用投影仪和相机重建 3D 场景 这个 repo 使用投影仪和相机来扫描场景并创建 3D 模型。 为了实现这一点,结构光图案被投射到场景上。 这是用相机捕获以确定密集对应关系。 该存储...
javascript js_leetcode题解之89-gray-code.js
c语言基础 c语言_leetcode题解之0089_gray_code.zip
# [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...
gray code 二分查找 序列号 题目名称 题目难点 162 树的问题 序列号 题目名称 题目难点 297 leet code 序列号 题目名称 题目难点 33 搜索旋转排序数组 要求O(logN),同时数组是个旋转数组 34 在排序数组中查找元素的...
- **2.1.19 Gray Code** - 生成格雷编码序列。 - 实现思路:基于位运算的规律。 - **2.1.20 Set Matrix Zeroes** - 给定一个m x n的矩阵,如果某个元素为0,则将其所在行和列的所有元素设为0。 - 实现思路:...
解法一:循环生成数组结果,倒序遍历已有的格雷码加上偏移量即可扩充格雷码位数vector<int> grayCode(int n) {执行结果:执行用时 : 4
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 ...
格雷编码(Gray Code),又称格雷码或格雷二进制码,是一种特殊的二进制数字系统。在格雷编码中,两个连续的数值之间仅有一位数字不同,这使得它在数据传输、编码设计以及计算机科学的多个领域中有广泛应用。本篇...
格雷编码(Gray Code),又称格雷码或反射码,是一种二进制数字系统,它的特点是任意两个相邻的数值之间只有一个位元的差异。这种编码方式在数据传输、编码电路设计以及计算机科学的多个领域都有广泛的应用,因为它...
转换二进制到格雷码可以用公式`GrayCode = Binary ^ (Binary >> 1)`,而格雷码到二进制可以通过逐位比较并递归计算。例如,Q89题就涉及到了格雷编码的转换。 此外,数论还涉及到一些实用技巧,如在Q136题中,通过...
另一种方法是使用位操作,如上述 `Solution` 类中的 `grayCode` 函数所示。这个函数首先创建一个长度为 \(2^n\) 的数组 `ans` 并初始化为全 0,然后遍历从 1 到 \(2^n - 1\) 的所有整数。对于每个 i,将 i 右移一位...