LC每日一题|20240421 - 216. 组合总和 III

95 阅读1分钟

LC每日一题|20240421 - 216. 组合总和 III

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

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

提示:

  • 2 <= k <= 9
  • 1 <= 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
    }
}

碎碎念

图片.png