leetcode题库39.组合总和——递归 穷举
class Solution: def combinationSum(self, candidates, target): res,ans=[],[] def findpath(candidates): if sum(ans)==target: res.append(ans.copy()) return if sum(ans)>target: return for k,i in enumerate(candidates): for repeat in range(1,target+1): for _ in range(repeat): ans.append(i) print(i) findpath(candidates[k+1:]) for _ in range(repeat): ans.pop() return findpath(candidates) return res try: solution=Solution() intervals = [[1,3],[2,6],[8,10],[15,18]] res=solution.combinationSum([7,2,1],7) print(res) except: print('error')
在评论区看到高分题解:
from typing import List class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: def dfs(candidates, begin, size, path, res, target): if target == 0: res.append(path) return for index in range(begin, size): residue = target - candidates[index] if residue < 0: break dfs(candidates, index, size, path + [candidates[index]], res, residue) size = len(candidates) if size == 0: return [] candidates.sort() path = [] res = [] dfs(candidates, 0, size, path, res, target) return res