又是一道递归题,答案作者写的都相当精妙,不过可读性就很差了,难受。
本题是要使得将前 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