临海响应式网站设计,天津武清做网站,西安网站建设市场,淘宝客做网站需要那些条件找出所有相加之和为 n 的 k 个数的组合#xff0c;且满足下列条件#xff1a;
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次#xff0c;组合可以以任何顺序返回。示例 1:
输入: k 3, n 7
输出: [[1,2,4]]
解释:
1… 找出所有相加之和为 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
没有其他符合的组合了。
示例 3:
输入: k 4, n 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字我们可以得到的最小和是1234 10因为10 1没有有效的组合。
提示:
2 k 9
1 n 60 解题思路【回溯】 迭代三部曲1、确认递归函数返回值与参数n,k,结果数组res子集合path子集合首元素起始位置startindex2、回溯函数终止条件子集合和 n and 子集合长度 k3、单层搜索过程剪枝sum(path) n则直接回溯循环遍历[startindex, 9 1 - (k - len(path)) 1]的每个元素i——包含再度剪枝操作从startindex开始确保可以满足子集合还需要的元素数目k - len(path)不满足则结束循环遍历不进行遍历。path.append(i)再递归遍历子集合下一元素startindex 1若子集合的遍历终止则回溯path.pop()遍历下一个元素i 1。 类似博文[leetcode]77_组合-CSDN博客 import traceback
class Solution:def combination_total(self, k, n, res, startindex, path[]):length len(path)if sum(path) n:# 回溯寻找下一组returnif sum(path) n and length k:res.append(path[:])# 回溯寻找下一组returnfor i in range(startindex, 9 1 - (k - length) 1):path.append(i)self.combination_total(k, n, res, i 1, path)# 回溯path.pop()if __name__ __main__:try:k, n map(int, input().split())res []solution Solution()solution.combination_total(k, n, res, 1)print(res)except Exception as e:traceback.print_exc() 仅作为代码记录方便自学自查自纠