Как вернуть комбинации с использованием рекурсии в Python - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу напечатать комбинации всех элементов списка. Но каждый раз, когда мои коды приводят к списку пустых списков. Что я хочу, это 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

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Почему бы не использовать 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)))
0 голосов
/ 16 апреля 2020

Список curNums, который вы добавляете, каждый раз является одним и тем же списком, поэтому все добавления и добавления создаются в одном и том же списке.

Вместо того, что вам нужно добавить к результату, должно быть Новая копия списка каждый раз - попробуйте result.append(curNums[:]). Создание копии текущего списка значений.

...