下面是获取数组所有子集的一些代码:
def subsets(arr, seq = []):
if arr == []:
return [seq]
return subsets(arr[1:], seq) + subsets( arr[1:],seq + [arr[0]])
print subsets([1, 2, 3])
# Here is the output: [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
问题:1。这有效吗? 我将值seq传递给许多堆栈.... 2.如何使用一个参数(arr param)创建递归解决方案3.是否存在针对此问题的非递归解决方案? 4.所有这些方法中哪一种最快,最好在面试中出现?
发布于 2018-08-16 17:09:25
实际上,如果你搜索“迭代所有子集”,你会发现很多解决方案。在许多语言中,迭代比递归运行得更快。Python也不例外。一些函数式语言可以自动为某些递归函数(尾叫递归)生成迭代代码。Python没有这样做,Guido已经指出了这一点。
https://stackoverflow.com/questions/-100002224
复制相似问题