LeetCode Solution-89
Posted littledy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Solution-89相关的知识,希望对你有一定的参考价值。
89. 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 - 2
For 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].
思路:
产生格雷码的方法有很多种,这里选取其中一种方法。采用递归的方式生成格雷码,方法是根据n-1位的格雷码产生n位的格雷码。具体操作为(2进制下):将n-1位的格雷码首位补零,然后按照前面格雷码的倒序接在后面,首位加1。
以n=2和n=3为例。
n=2 n=3
0 00 0 000
1 01 1 001
3 11 3 011
2 10 2 010
6 110
7 111
5 101
4 100
这样转换为十进制后可以发现,n位格雷码与n-1位格雷码相比,前面一半的值不变,后面的值为前面顺序颠倒之后的值加上(2^{n-1})。
Solution:
vector<int> grayCode(int n) {
vector<int> res(1, 0);
for (int i = 0; i < n; i++) {
int size = res.size();
for (int j = size-1; j >= 0; j--) {
res.push_back(res[j] + pow(2, i));
//res.push_back(res[j]|1<<i); //语法不太懂,暂时留着
}
}
return res;
}
性能:
Runtime: 4 ms??Memory Usage: 8.7 MB
以上是关于LeetCode Solution-89的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段