当前位置: 首页 > news >正文

python-leetcode-组合总和 Ⅳ

377. 组合总和 Ⅳ - 力扣(LeetCode)

这道题是组合总和问题的一种变形,求的是不同元素组成 target组合个数,可以用动态规划来解。

解法:动态规划

1. 定义状态

dp[i] 表示总和为 i 的元素组合的个数

2. 状态转移方程

对于 nums 中的每个数 num

  • 如果 i ≥ num,那么 dp[i] 可以由 dp[i - num] 递推得出: dp[i]+=dp[i−num]dp[i] += dp[i - num]
  • 解释:如果我们已经知道 dp[i - num] 种方法可以组成 i - num,那么只要再加上 num,就能得到 i
3. 初始化
  • dp[0] = 1,表示凑成 0 的方法只有一种:什么都不选。
4. 遍历顺序
  • 外层遍历 i(从 0target:计算每个 i 的组合数。
  • 内层遍历 num(遍历 nums:尝试使用 num 组合成 i

代码实现

def combinationSum4(nums, target):
    dp = [0] * (target + 1)
    dp[0] = 1  # 只有一种方法凑成 0,即什么都不选
    
    for i in range(1, target + 1):  # 计算从 1 到 target 的组合数
        for num in nums:  # 尝试每个数
            if i >= num:
                dp[i] += dp[i - num]

    return dp[target]

时间复杂度分析

  • 外层循环遍历 1 ~ target,执行 O(target) 次。
  • 内层循环遍历 nums,执行 O(n) 次。
  • 总复杂度O(n * target),其中 nnums 的大小。

示例

输入
nums = [1, 2, 3]
target = 4
print(combinationSum4(nums, target))
输出
7
解释

满足条件的组合:

  • 1 + 1 + 1 + 1
  • 1 + 1 + 2
  • 1 + 2 + 1
  • 1 + 3
  • 2 + 1 + 1
  • 2 + 2
  • 3 + 1

总共 7 种组合,返回 7

这个方法利用动态规划,高效求解了所有可能的组合数。🚀

相关文章:

  • JDK ZOOKEEPER KAFKA安装
  • LeetCode 前缀和章节
  • uniapp或者vue 使用serialport
  • HTML第四节
  • java中实体类常见的设计模式
  • std::string的模拟实现
  • 基于混合蝴蝶粒子群算法 粒子群算法 蝴蝶算法实现无人机复杂山地环境下航迹规划附matlab代码
  • 《Linux C 智能 IO 矩阵:输入输出的自适应数据流转》
  • 如何设置爬虫的User-Agent?
  • 顺序表的插入、删除
  • 5分钟速览深度学习经典论文 —— attention is all you need
  • [AI相关]--可能不是0基础,但是很快解决c4d导出unity英雄联盟Lol模型问题
  • [记录与分享]如何保持充足的能量
  • Go学习笔记:Gin-路由
  • 3-9 WPS JS宏单元格复制、重定位应用(拆分单表到多表)
  • Next.js项目实战-ai助手帮我写文章发布视频第1节(共89节)
  • JavaScript 正则表达式全面指南
  • HDFS的设计架构
  • 网络安全审计 主要包括哪些内容
  • 树莓派学习(一)——3B+环境配置与多用户管理及编程实践
  • 微信销售小程序/搜索引擎seo关键词优化
  • iis 临时网站/网站优化师
  • wordpress 快速安装失败/网站怎么优化推荐
  • 湛江做网站的公司/今日头条官网
  • 辽宁省建设银行网站/线上销售怎么做推广
  • 免费咨询身高问题/沈阳seo关键词