LC每日一题|20240421 - 216. 组合总和 III
找出所有相加之和为
n的k个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
提示:
2 <= k <= 91 <= n <= 60
题目等级:Medium
解题思路
昨天押题没押中...
不过也差不多啦,还是一道简单的回溯问题。
比起昨天来说,唯一的不同是在target == 0的时候需要判断一下cur.size == k。
AC代码
class Solution {
fun combinationSum3(k: Int, n: Int): List<List<Int>> {
val res = ArrayList<ArrayList<Int>>()
val cur = ArrayList<Int>()
fun dfs(index: Int, target: Int) {
if (target == 0) {
if (cur.size == k) res.add(ArrayList(cur))
return
}
if (index > 9) return
dfs(index + 1, target)
if (target >= index) {
cur.add(index)
dfs(index + 1, target - index)
cur.removeAt(cur.size - 1)
}
}
dfs(1, n)
return res
}
}