我如何 return 在 Python 中使用递归组合

How do I return Combinations using recursion in Python

我想打印列表中所有元素的组合。但是每次我的代码都会产生一个空列表列表。 想要的是input = [1,2,3]Output = [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]] 我得到的是 [[][][][][][][][]]

My Python code

class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
    result = []
    curNums = []
    def dfs(nums , i):
        if i == len(nums):
            result.append(curNums)
        else:
            curNums.append(nums[i])
            dfs(nums , i+1)
            curNums.pop()
            dfs(nums , i+1)
    dfs(nums , 0)
    return result

您添加的 curNums 列表每次都是同一个列表 - 所以 append/pop 都是在同一个列表上创建的。

相反,每次您需要附加到结果的内容应该是列表的新副本 - 尝试 result.append(curNums[:])。创建当前列表值的副本。

为什么不使用 https://docs.python.org/2/library/itertools.html#itertools.permutations 并创建每个子集长度的排列?像这样:

import itertools  
input =  [1,2,3]
results = []
for i in range(len(input)+1):
    results.append(list(itertools.permutations(input,i)))