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;
    }
};
全部评论

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务