leetcode 377 Combination Sum IV 详细解答

本文深入解析了LeetCode 377题“组合总和IV”的解决策略,从最初的回溯算法出发,指出其超时问题,并逐步过渡到动态规划方法,通过状态转移方程f(i)=∑num∈numsf(i−num),优化算法效率,最终给出高效代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode 377 Combination Sum IV 详细解答

在这里插入图片描述
上来无脑用回溯,像 leetcode 77
代码如下:
在这里插入图片描述
结果超时。所以只能换个思路。


举例说明:
n u m s = [ 1 , 2 , 3 ] t a r g e t = 4 nums = [1, 2, 3] \\target = 4 nums=[1,2,3]target=4

1 → [ 1 ] 1 → [1] 1[1]
2 → [ 1 , 1 ] , [ 2 ] 2 → [1, 1], [2] 2[1,1],[2]
3 → [ 1 , 1 , 1 ] , [ 1 , 2 ] , [ 2 , 1 ] , [ 3 ] 3 → [1, 1, 1], [1, 2], [2, 1], [3] 3[1,1,1],[1,2],[2,1],[3]
4 → [ 1 , 1 , 1 , 1 ] , [ 1 , 1 , 2 ] , [ 1 , 2 , 1 ] , [ 1 , 3 ] , [ 2 , 1 , 1 ] , [ 2 , 2 ] , [ 3 , 1 ] 4 → [1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 3], [2, 1, 1], [2, 2], [3, 1] 4[1,1,1,1],[1,1,2],[1,2,1],[1,3],[2,1,1],[2,2],[3,1]

通过举例我们可以发现,这是个背包问题
包就是4,硬币就是 [1,2,3]
如果要求的 dp[4],
(1)如果将 1 放入背包,那么背包就只有 3 的剩余,即是求 dp[3]
(2)如果将 2 放入背包,那么背包就只有 2 的剩余,即要求的是 dp[2]
(3)如果将 3 放入背包,那么背包就只有 1 的剩余,即要求的是 dp[1]
    . . . . . . ...... ......

如果target是7,8也是一样的求法。


最后总结出来的状态转移方程。
f ( i ) 表 示 t a r g e t = i 时 的 组 合 数 , 在 i > = n u m 前 提 下 : f(i)表示target = i时的组合数, 在 i >= num前提下: f(i)target=i,i>=num
f ( i ) = ∑ n u m ∈ n u m s f ( i − n u m ) f(i)=\sum_{num\in{nums}}f(i-num) f(i)=numnumsf(inum)
具体代码如下:
在这里插入图片描述


参考别人的代码改进了一下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值