文章目录
- 一、题目描述
- 示例 1
- 示例 2
- 示例 3
- 二、代码
- 三、解题思路
一、题目描述
找出所有相加之和为 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个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。
提示:
2 <= k <= 9
1 <= n <= 60
二、代码
代码如下:
class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:if sum(i for i in range(1,k+1)) > n or sum(i for i in range(9,9-k,-1)) < n:print("[]")return []all_com = itertools.combinations([i for i in range(1,10)], k)all_com = [list(e) for e in all_com]result = []for e in all_com:if sum(e) == n:result.append(e)print(result)return result
三、解题思路
本题考验对于1~9
自然数之间的组合问题,由于所需要组合的数目并不多,这里直接使用全组合函数combinations
获取1~9
数字中任意k
个数的组合情况,之后通过判断其总和是否等于n
,来返回对应的组合。