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;
    }
};
京公网安备 11010502036488号