89. Gray Code
来源:互联网 发布:淘宝联盟怎么领券 编辑:程序博客网 时间:2024/05/16 04:52
题目: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.
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.
格雷码是二进制数字串,当中每两个连续的数字中只有一个二进制位上的值不一样,给出一个非负的整数代表二进制位的总位数,输出一串符合要求的格雷码,注意从 0 开始。
例:n = 2
那么序列可以是
返回[ 0, 1, 3, 2 ]
注意返回的序列结果是不唯一的,例如[ 0, 2, 3, 1 ]也是可以的。
题目的难点在于要保证每两个连续的数只能有一个二进制位不同。
不放把样本放大一点来看,假设n = 4:
这是一个符合要求的序列,序号这一列表示他们在数组中的顺序,我们可以好好的观察一下。
不考虑更高位的情况下,序号 0 到 1 是 n = 1 的结果, 序号 0 到 3 是 n = 2 的结果, 序号 0 到 7 是 n = 3的结果, 序号 0 到 15 是 n = 4 的结果,观察 n = 2 和 n = 1的两个结果,可以发现,n = 2的结果如果不考虑第2位的话,只看第一位是镜面对称的,即最后一位是 0 ,1,1,0 这样的对称方式,同理 n = 3 除了最高位之外剩下的也是 由 n = 2 对称而来,即 00,01,11,10,10,11 ,01,00.
这样思路就出来了:
n 每增加1 位,把当前的最高位置为1,然后按照从后往前的顺序加上前面的所有的数。
代码如下:
class Solution {public: vector<int> grayCode(int n) { vector<int> ans; ans.push_back(0); if (!n) return ans; ans.push_back(1); int index = 1; while(index < n) { int len = ans.size(); int temp = 1; for (int i = 0; i < index; ++i) temp = (temp << 1); // 将最高位置1 // 把之前的数从大到小加起来形成对称 for (int i = len - 1; i >= 0; --i) { ans.push_back(temp + ans[i]); } index++; } return ans; }};
- [LeetCode]89.Gray Code
- LeetCode 89. Gray Code
- [Leetcode] 89. Gray Code
- LeetCode --- 89. Gray Code
- [leetcode] 89.Gray Code
- 89. Gray Code
- 89. Gray Code
- 89. Gray Code LeetCode
- 89. Gray Code
- [LeetCode]89. Gray Code
- 89. Gray Code
- 89. Gray Code
- 89. Gray Code
- Leetcode 89. Gray Code
- [leetcode] 89. Gray Code
- 89. Gray Code
- LeetCode *** 89. Gray Code
- 89. Gray Code
- spring 基于AOP事务控制实现的基础
- 21CN维权平台 在此仅作记录,以备用到
- 任务四:Activity的生命周期测试
- server2008,本机可以登录ftp,其他机器登录不了解决办法。肯定是防火墙的问题
- SonarQube的安装、配置与使用
- 89. Gray Code
- MDCC2016 VR峰会演讲资料-虚幻4渲染系统架构解析
- 多媒体处理开源库
- Eigen库数据结构内存对齐问题
- NSIS 打包脚本基础
- 解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 技术点详解---IPSec VPN基本原理
- JavaScript基础(二)——数据类型