我正试图找到一种方法来制定递归算法,该算法将给出一组数字(0-> n)的所有k长度子集,但是我无法将列表作为参数发送给函数。
最终我想返回列表列表
我从头开始考虑,使用某种DP。 我尝试过的所有事情都没有做到这一点
谢谢
答案 0 :(得分:1)
首先处理最后一个元素(n-1
)可以使您不传递具有给定函数签名的中间结果:
def subsets(n, k):
if n < k or k < 0:
return []
if k == n:
return [list(range(k))]
return subsets(n-1, k) + [s+[n-1] for s in subsets(n-1, k-1)]
>>> subsets(3, 2)
[[0, 1], [0, 2], [1, 2]]
>>> subsets(4, 2)
[[0, 1], [0, 2], [1, 2], [0, 3], [1, 3], [2, 3]]
>>> subsets(4, 3)
[[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]]