使用递归找到所有k个子集

时间:2018-12-09 23:33:50

标签: python recursion subset backtracking

我正试图找到一种方法来制定递归算法,该算法将给出一组数字(0-> n)的所有k长度子集,但是我无法将列表作为参数发送给函数。

最终我想返回列表列表

我从头开始考虑,使用某种DP。 我尝试过的所有事情都没有做到这一点

谢谢

1 个答案:

答案 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]]