代碼隨想錄訓(xùn)練營(yíng)Day25 | 216.組合總和III,17.電話號(hào)碼的字母組合

216. 組合總和 III
  • 77. 組合題目類似
  • 收集結(jié)果滿足條件需為:sum == n&& path.length == k
var combinationSum3 = function(k, n) {
    let result = []
    let path = []
    let sum = 0
    const backtracking = (sum, n, k, startIndex) => {
        if (path.length === k && sum === n) {
            result.push([...path])
            return
        }
        for (let i = startIndex; i <= 9; i++) {
            path.push(i)
            sum += i
            backtracking(sum, n, k, i+1)
            sum -= i
            path.pop()
        }
    }
    backtracking(sum, n, k, 1)
    return result
};
17. 電話號(hào)碼的字母組合
  • 定義map來構(gòu)造數(shù)字和字母的映射關(guān)系
  • 定義path來收集葉子節(jié)點(diǎn)的結(jié)果
  • 遞歸參數(shù):digits,index(指遍歷digits對(duì)應(yīng)字符串中的第幾個(gè)字符)
  • 遞歸結(jié)束條件:path長(zhǎng)度等于digits長(zhǎng)度
  • 回溯處理


    image.png
var letterCombinations = function(digits) {
    if (!digits) {
        return []
    }
    // 構(gòu)造
    const map = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
    if (digits.length === 1) {
        return map[digits].split("")
    }
    let path = ""
    let result = []
    const backtracking = (digits, index) => {
        // index: 遍歷到第幾個(gè)字符
        if (path.length === digits.length) {
            result.push(path)
            return
        }
        console.log(map[digits[index]])
        for (let i = 0; i < map[digits[index]].length; i++) {
            path += map[digits[index]][i]
            backtracking(digits, index+1)
            path = path.substring(0, path.length - 1)
        }
    }
    backtracking(digits, 0)
    return result
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容