组合问题 2

本文讲述了作者在中秋节期间遇到的LeetCode组合问题,通过将问题归结为选择逻辑,利用递归策略实现解决方案。讨论了如何处理左选择和右不选择,给出了示例和最终解题思路。祝大家节日快乐的同时提升编程技巧。
摘要由CSDN通过智能技术生成

虽然是中秋节,但是还要继续学习。

今天在 leetcode 上刷题的时候,又刷到一个组合的问题,下面是这道题的链接,感兴趣的小伙伴也可以去尝试一下。https://leetcode.cn/problems/combination-sum-iii/

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9,每个数字 最多使用一次 。返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

输入: k = 3, n = 7

输出: [[1,2,4]]

解释:

1 + 2 + 4 = 7

没有其他符合的组合了。


示例 2:

输入: k = 3, n = 9

输出: [[1,2,6], [1,3,5], [2,3,4]]

解释:

1 + 2 + 6 = 9

1 + 3 + 5 = 9

2 + 3 + 4 = 9

没有其他符合的组合了。


看到这个问题,我们还是可以归结为下图的选择逻辑,从 1 到 9 ,每个数字都可以选择或者不选择,如下图所示,当选择到 9 的时候,每个 root 到叶子节点的路径就是一种选择方案,如果该选择方案里面,只选择了 k 个数字,且这 k 个数字的和恰好为 n,则该方案是符合题意的一种组合。


83bb56fb978956647672b63b42ecd0af.jpeg


根据这张图,我写了如下的解题方案:


1536cfbb942cfde6cf9098c2ed72b489.jpeg


处理左子树的时候,我们向 ele 列表中添加当前的数字,并将当前数字累加到 sum 里面,如果 sum 等于 n ,然后 ele 里面又恰好是 k 个数字,符合题意,记录当前的方案,后面的数字认为不再选择,例如,我们已经选择了 1 和 2,要求只选择两个数字,那么 3 和 4 就认为是不选择的,我们也不再向下迭代。处理完左子树的“选择”后,我们再处理右子树的“不选择”,此时就不再向 ele 列表里面添加元素,因为右子树是不选择,所以直接向下迭代。

运行结果:

8349f90c4a2be7289d637796252d8388.jpeg


最后:祝大家中秋节快乐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_37657276

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值