leetcode[88] Gray Code

题目:格雷码。

格雷码是从0开始且之后两个相邻码之间只有一个符号不相同,例如000,100,101,111三个相邻之间只有一个二进制不同。

现在给定一个数字n,然后给出格雷码所对应的数字。例如:

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0

01 - 1

11 - 3

10 - 2

左边一列是格雷码,右边一列是对应的需要输出的十进制。

我们来观察一下格雷码的规律。如果是1那么是

0

1

如果是2的时候,其实就是在0和1前面加0,再在1,0前面加1。

3的时候就是把2的格雷码先加零,然后倒序前面加1,那么我们就可以按照这个规律

000

001

011

010

110

111

101

100

知道怎么来的,而且如果记录的话就是从0开始,往后记,而且因为前面加零的大小是不变的,那么先加入一个0后,之后每次记录在前面加1的即可。那么可以如下:

class Solution {
public:
    vector<int> grayCode(int n) 
    {
        vector<int> ans;
        ans.push_back(0);
        
        for (int i = 0; i < n; ++i)
        {
            int left = 1<<i;
            int len = ans.size();
            for (int j = len-1; j >= 0; --j)
                ans.push_back(left + ans[j]);
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/higerzhang/p/4114535.html