【LeetCode】89. 格雷编码

【LeetCode】89. 格雷编码_第1张图片
【LeetCode】89. 格雷编码_第2张图片

解题思路

【LeetCode】89. 格雷编码_第3张图片

  • 回溯算法
  • 先找一次全排列,对每一个排列用公式转换成格雷编码,最高一位保留,后一位与前一位进行异或。

python 代码

class Solution:
    def grayCode(self, n: int) -> List[int]:
        if n == 0:
            return [0]
        ret = []
        trace = []
        self.backtrace(n,ret,trace)
        res = []
        for i in ret:
            ss = 0
            for k,v in enumerate(i[::-1]):
                ss += v*(2**k)
            res.append(ss)
        return res


    def backtrace(self,n,ret,trace):
        if len(trace) == n:
            a = trace[:]
            b = trace[:]
            for j in range(1,n):
                b[j] = a[j-1]^b[j]
            ret.append(b)
            return

        for i in range(2):
            trace.append(i)
            self.backtrace(n,ret,trace)
            trace.pop()

s = Solution()
result = s.grayCode(2)
print(result)

你可能感兴趣的:(数据结构与算法)