【Leetcode】216.组合总和 III

30 阅读1分钟

leetcode-216.png

题目简述:从1-9中找出k个数字,凑出的和为n,元素不能重复使用

直接套用回溯模板即可,这里的剪枝条件也是比较明显的,k个元素,sum的限制

var combinationSum3 = function (k, n) {
    let res = []
    var backtrack = function (start, one, sum) {
        // 满足条件
        if (one.length === k && sum === 0) {
            res.push([...one])
            return
        }
        // 不符合条件,直接剪枝 return
        if (one.length > k || sum < 0) return
        for (let i = start; i < 10; ++i) {
            one.push(i)
            // 因为题目要求,不能包含重复元素,所以起始点为 i + 1
            // 也就是下一个元素
            // Each number is used at most once
            backtrack(i + 1, one, sum - i)
            // 回溯
            one.pop()
        }
    }
    // 起始点为 1
    backtrack(1, [], n)
    return res
};