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]
相关推荐
笨笨饿15 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
风萧萧199915 小时前
问答样例如何在RAG问答中使用?
算法
七夜zippoe15 小时前
DolphinDB分区策略:HASH分区与COMPO分区
算法·哈希算法·hash·dolphindb·compo
沪漂阿龙16 小时前
程序员面试技术爆款文:2026大厂算法通关手册——从零基础到LeetCode刷穿,这一篇就够了
算法·leetcode·面试
rit843249917 小时前
基于博弈论的小区分簇算法MATLAB实现
开发语言·算法·matlab
华清远见成都中心17 小时前
C 语言内存管理深度解析:malloc/free 与嵌入式堆栈分配策略
java·c语言·算法
一行代码一行诗++17 小时前
关系操作符
算法
生成论实验室18 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第五章 事:行在时空中的具体化
人工智能·算法·架构·知识图谱·创业创新
Liangwei Lin18 小时前
LeetCode 283. 移动零
算法
Lenyiin18 小时前
《LeetCode 顺序刷题》61 - 70
java·c++·python·算法·leetcode·lenyiin