89. 格雷编码

https://leetcode-cn.com/problems/gray-code/

又是一道递归题,答案作者写的都相当精妙,不过可读性就很差了,难受。

本题是要使得将前 2^n 个数字,按一定二进制顺序排序。

我想,如果我设计一个按从小到大排列的递归算法会是怎么样的:

def nums2list(self,n):

  if n == 0:

    return [0]

  res = []

  def getList(str):

    if len(str) == n:

      res.append(int(str,2))

    else:

      getList(str+'0')

      getList(str+'1')

  getList('')

  return res

可能是这样的,但是出来的可能就是 01234567

如果要让他们带顺序,就要在递归的时候就表现出顺序,不能每次都是先递归 getList(str + '0') 或者说 +‘0’ 和 + ‘1’ 的 必须有一定的规律。

顶层:

  一个str有两个方向,+ ‘0’ 或者 +‘1’

  getList(str+'0')

  getList(str+'1')

底层:

  if len(str) == n:

    res.append(int(str,2))

    

原文地址:https://www.cnblogs.com/ChevisZhang/p/12236638.html