【LeetCode】89. Gray Code
2016-02-29 20:12
459 查看
题目:
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.
提示:
注意,满足格雷码定义的二进制序列可能会不止一种,因此本文所指出的解法并非唯一解。考虑到格雷码相邻两个二进制数只能在一位上有差异,所以我们可以用一种从最低为开始,逐位加一的方法去解决这个问题,直接看一个例子,我们以n=3为例。
我们可以令一开始的数为000,然后在最低位加一,此时所有已知格雷码为:
000 001
然后我们在上述已知的格雷码中,从下往上在次低位加一:
000 001
011
010
这里要注意加一的顺序,必须要从下往上加,因为新增加的数字如果是从上往下产生的,那么就相当于是同时在多个位上发生改变,而从下往上加可以确保只有一位发生了改变,又因为原先有的相邻格雷码之间只有一位有区别,如果在同一个位置上都加一,相邻两个之间的差异仍然只有一,因此性质还是成立的。
最后我们在最高位上加一,注意还是要从下往上:
000 001
011
010
110
111
101
100
代码:
class Solution { public: vector<int> grayCode(int n) { vector<int> res(1, 0); for (int i = 0; i < n; ++i) { int size = res.size(); while (size--) { int curNum = res[size]; curNum += (1 << i); res.push_back(curNum); } } return res; } };
相关文章推荐
- 【POJ1741】Tree【点分治】
- 设计模式--工厂设计模式
- Android手机两种方式获取IP地址
- 初次接触kmp看毛片算法
- Low-rank representation with local constraint for graph construction
- 广义表
- Android上3G/4G模组调试
- 《Java实战开发经典》第五章5.8
- 谨以此文献给软件行业的同仁们(群转发)
- Django学习-01
- 安卓开发——报错:duplicate files copied in apk meta-inf/License.txt
- IOS 证书失效
- android 中的一些焦点处理(listView GridView 抢焦点 与focus技巧)
- 102. Binary Tree Level Order Traversal
- 南阳ACM 题目275:队花的烦恼一 Java版
- 南阳ACM 题目275:队花的烦恼一 Java版
- Linux 交换分区
- 绑定。
- c语言中字符数组和字符指针的区别
- 个人介绍