算法题每日一练:组合总和 III
一、问题描述
找出所有相加之和为 n
的 k
个数的组合,且满足下列条件:
只使用数字 1 到 9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
题目链接:组合总和 III
二、题目要求
样例
复制代码
考察
复制代码
三、问题分析
本题是开启回溯算法刷题的第3
题,之前没有了解过可以看一下这篇题解,讲解比较详细。
这一题和我们之前刷的算法题每日一练---第88天:组合总和 II很相似,或者说变得更简单了,因为这一题只允许使用 1~9,不会出现重复的元素,不需要进行判重剪枝操作。
第一式:函数初始
我们要初始化一个函数来承载回溯,函数里面的参数如何确定呢?
首先,要传入给定的数组信息,目标值,初始遍历的下标。
复制代码
第二式:终止条件
什么时候结束继续向下开始搜索的条件呢?
题目要求 target 可以由数组的哪些元素组成,每加入一个元素,target 要减去这个元素的值。
如果 target==0,并且此时数组元素的个数要等于 k,那么就符合终止条件。
复制代码
第三式:剪枝优化
这一题剪枝比较简单,上面终止的条件不是等于 0 咩。
那如果 target 已经小于 0,数组个数大于 k,那我们还有必要继续搜索吗,完全没必要。
复制代码
第四式:递归处理
复制代码
每一次如果 i 小于 target,那么就加入数组,目标值减去 i 的值。
模板:
复制代码
冲冲冲!
四、编码实现
复制代码
五、测试结果
版权声明: 本文为 InfoQ 作者【知心宝贝】的原创文章。
原文链接:【http://xie.infoq.cn/article/cc7db3196b4b5f9d722725621】。文章转载请联系作者。
评论