Глобальный список обновляется внезапно при добавлении во время рекурсивных вызовов - PullRequest
0 голосов
/ 24 июня 2019

На платформе Leetcode у меня возникла проблема под названием «Сумма комбинаций», где мне нужно найти все пары, которые суммируются с целевым значением, указанным в качестве входных данных для программы.

В предоставленном коде во время рекурсивного вызова, когда цель равна стоимости, список partialsol должен быть добавлен к глобальному результату списка. Но после каждого рекурсивного вызова, когда это условие выполняется, список результатов обновляется, а затем добавляется partialsol, и после завершения всех рекурсивных вызовов возвращаемый список результатов становится пустым.

class Solution(object):
    result = []

    def findpairs(self, partialsol, candidates, target, cost, start):
        if(cost == target):
            print(self.result)
            print(partialsol)
            self.result.append(partialsol)
            print(self.result)
            print('---------------')
            return
        else:
            for i in range(start, len(candidates)):
                c = candidates[i]   
                if((cost+c) > target):
                    continue
                partialsol.append(c)
                self.findpairs(partialsol, candidates, target, cost+c, i)
                partialsol.pop()
            return

    def combinationSum(self, candidates, target):
        partialsol = []
        self.findpairs(partialsol, candidates, target, 0, 0)
        return self.result

Ваш ввод

candidates: [2,3,6,7]

target: 7

stdout:

[]

[2, 2, 3]

[[2, 2, 3]]

[[7]] #here the result list is getting updated from [[2,2,3]] to [[7]] even before appending.

[7]

[[7], [7]] #here the partialsol is appended but lost the previous list [[2,2,3]] as it is updated to [[7]].

Output

[[],[]] #returned result as empty lists of list

Expected

[[2,2,3],[7]]
...