代码随想录算法训练营Day 25|216. 组合总和 III、17. 电话号码的字母组合

45 阅读1分钟

216. 组合总和 III

题目链接

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

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

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

var combinationSum3 = function(k, n) {
    let res = [], path = [], sum = 0
    function backstracking(n, k, startIndex){
        if(sum == n && path.length == k){
            res.push([...path])
            return 
        }
        for(let i=startIndex; i<=9; i++){
            sum += i
            path.push(i)
            backstracking(n, k, i+1)
            sum -= i
            path.pop()
        }
    }
    backstracking(n, k, 1)
    return res
};

17. 电话号码的字母组合

题目链接

要求:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

var letterCombinations = function(digits) {
    const map = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]
    let path = [], res = []
    function backstarcking(digits, index){
        if(path.length == digits.length){
            res.push(path.join(''))
            return 
        }
        let digit = digits[index] - '0'
        let letters = map[digit]
        for(let i=0; i<letters.length; i++){
            path.push(letters[i])
            backstarcking(digits, index+1)
            path.pop()
        }
    }
    if(digits.length == 0) return res
    backstarcking(digits, 0)
    return res
};