组合总和 Ⅳ-LeetCode
377. 组合总和 Ⅳ - Combination Sum IV
🎯 问题描述(来源于LeetCode)
描述:
给你一个由不同整数组成的数组 nums 和一个目标整数 target。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
说明:
- 顺序不同的序列被视作不同的组合(即排列)。
- 每个元素可以使用无限次。
示例:
- 示例 1:
1 | 输入: nums = [1,2,3], target = 4 |
- 示例 2:
1 | 输入: nums = [9], target = 3 |
💻 解题思路
思路:动态规划(爬楼梯思想)
算法步骤
- 定义
dp[i]表示总和为i的组合个数。 - 初始化
dp[0] = 1(空组合)。 - 对于
i从 1 到target:- 遍历
nums中的每个数字k,如果k <= i,则dp[i] += dp[i - k](相当于用数字k作为最后一步)。
- 遍历
- 返回
dp[target]。
代码实现
1 | from typing import List |
📊 性能分析
- 时间复杂度:。
- 空间复杂度:。
思考
本题本质是求排列数(顺序相关),与 LeetCode 518 题(零钱兑换 II,组合数)不同。动态规划的顺序(外层遍历 target,内层遍历 nums)保证了不同顺序被统计为不同组合。用户代码思路清晰,使用了类似爬楼梯的递推关系,是正确的解法。注意:当 target 较大时,结果可能超过 32 位整数范围,但题目保证不会溢出。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






