LeetCode: 89. Gray Code
LeetCode: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.
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.
题目大意:输出位数为 n 的格雷码对应的数值。
解题思路
递归求解,后 2^(n-1) 个格雷码, 是前 2^(n-1) 个格雷码 前面加一位 1
生成的。
如: 0 1
==> 11 10
AC 代码
class Solution {
public:
vector<int> grayCode(int n) {
if(n == 0) return {0};
if(n == 1) return {0, 1};
vector<int> frontNElems = grayCode(n-1);
vector<int> backNElems;
int firstOneBit = 1 << (n - 1);
for(int j = frontNElems.size()-1; j >= 0; --j)
{
backNElems.push_back(firstOneBit+frontNElems[j]);
}
frontNElems.insert(frontNElems.end(), backNElems.begin(), backNElems.end());
return frontNElems;
}
};