Leetcode Day21组合总和

39 元素可重复选

输入:candidates = [2,3,6,7], target = 7

输出:[[2,2,3],[7]]

可以重复选, 代表for j in range(start, n)中, 下一个dfs起点可以是j, 这样代表了重复选择, 但是如何保证不会死循环呢, 就需要利用都是正数的条件了

python 复制代码
class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        ans = []
        def dfs(path, partial_sum, start):
            if partial_sum > target:
                return
            if partial_sum == target:
                ans.append(path[:])
                return 
            for j in range(start, len(candidates)):
                path.append(candidates[j])
                dfs(path, partial_sum + candidates[j], j)
                path.pop()
        dfs([], 0, 0)
        return ans

39 nums中有重复, 但每个只能选一次

输入: candidates = [10,1,2,7,6,1,5], target = 8,

输出:

[

[1,1,6],

[1,2,5],

[1,7],

[2,6]

]

只用添加两个改变, 横向去重和下一个的开始index会变为j + 1

python 复制代码
class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        ans = []
        candidates.sort()
        def dfs(path, partial_sum, start):
            if partial_sum > target:
                return
            if partial_sum == target:
                ans.append(path[:])
                return
            for j in range(start, len(candidates)):
                if j > start and candidates[j] == candidates[j - 1]:
                    continue
                path.append(candidates[j])
                dfs(path, partial_sum + candidates[j], j + 1)
                path.pop()
        dfs([], 0, 0)
        return ans

377

输入:nums = [1,2,3], target = 4

输出:7

解释:

所有可能的组合为:

(1, 1, 1, 1)

(1, 1, 2)

(1, 2, 1)

(1, 3)

(2, 1, 1)

(2, 2)

(3, 1)

python 复制代码
class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = [1] + [0] * target
        for i in range(1, len(dp)):
            for num in nums:
                if num > target:
                    continue
                dp[i] += dp[i - num]
        return dp[-1]
相关推荐
A懿轩A1 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
云边有个稻草人1 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
忘梓.2 小时前
解锁动态规划的奥秘:从零到精通的创新思维解析(3)
算法·动态规划
tinker在coding4 小时前
Coding Caprice - Linked-List 1
算法·leetcode
LCG元7 小时前
【面试问题】JIT 是什么?和 JVM 什么关系?
面试·职场和发展
XH华8 小时前
初识C语言之二维数组(下)
c语言·算法
南宫生9 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_9 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯