【LeetCode】89. 格雷编码 python实现

在这里插入图片描述
在这里插入图片描述

解题思路

在这里插入图片描述

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

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)
发布了248 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42247922/article/details/104743411