[Leetcode89]格雷编码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。对于给定的 n,其格雷编码序列并不唯一。
这道题有点不确定。我的思路是相邻两个数的二进制码 异或 后只有一个1,下一个数都从第一个数开始遍历以免租后输出的各类编码长度不够。执行都没问题,提交后n=10时报错。由于格雷编码答案不唯一可能有很多种,所以不好判断我的错没错。但我的思路应该是没问题的,欢迎批评指正。

C++用的是标准库函数。

python:

class Solution(object):
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        res = [0]
        i = 1
        while i < 2**n:
            if bin(res[-1]^i).count('1') == 1:
                if i not in res:
                    res.append(i)
                    i = 1
                else:
                    i += 1
            else:
                i += 1
        return res;

C++: 

class Solution {
public:
    vector<int> grayCode(int n) {
        if(n == 0) {
            vector<int> sol;
            sol.push_back(0);
            return sol;
        } else {
            vector<int> previous = grayCode(n - 1);
            vector<int> sol(previous);
            for(int i = previous.size() - 1; i >= 0; --i) {
                sol.push_back((int)pow(2.0, n - 1) + previous[i]);
            }
            return sol;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_40501689/article/details/83047698