Study Plan For Algorithms - Part20

1. 组合总和
给定一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        def backtrack(curr_list, curr_sum, start):
            if curr_sum == target:
                res.append(curr_list[:])
                return
            if curr_sum > target:
                return
            for i in range(start, len(candidates)):
                curr_list.append(candidates[i])
                backtrack(curr_list, curr_sum + candidates[i], i)
                curr_list.pop()

        res = []
        backtrack([], 0, 0)
        return res

2. 组合总和 II
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        def backtrack(curr_list, curr_sum, start):
            if curr_sum == target:
                res.append(curr_list[:])
                return
            if curr_sum > target:
                return
            for i in range(start, len(candidates)):
                if i > start and candidates[i] == candidates[i - 1]:
                    continue
                curr_list.append(candidates[i])
                backtrack(curr_list, curr_sum + candidates[i], i + 1)
                curr_list.pop()

        candidates.sort()
        res = []
        backtrack([], 0, 0)
        return res
posted @ 2024-09-03 20:31  WindMay  阅读(9)  评论(0)    收藏  举报