LeetCode-電話號碼的字母組合(No.17) 遞迴+hash
LeetCode 17. 電話號碼的字母組合
給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下(與電話按鍵相同)。
注意 1 不對應任何字母。
示例:
輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
這道題的難點主要就是首先你能將輸入的號碼對應的結果映射出來,最後通過遞迴的形式兩兩組合得出結果
let letterCombinations = (digits) => { if (digits.length == 0) return [] //為空 情況 let map = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] let arr = digits.split('') let resarr = arr.map(item => map[item]) if (resarr.length == 1) return resarr[0].split('')//僅輸入一個 情況 let compute = (arr) => {//組合傳入陣列的前兩項['ab','cd','ewe'] let temp = []//['ac','ad','bc','bd'] // 將前兩項組合結果放入臨時陣列中 for (let i = 0; i < arr[0].length; i++) { for (let j = 0; j < arr[1].length; j++) { temp.push(`${arr[0][i]}${arr[1][j]}`) } } // [['ac','ad','bc','bd'],'ewe'] arr.splice(0, 2, temp)//將原來的陣列前兩項結果用臨時陣列替換 if (arr.length > 1) { compute(arr) } return arr[0] } return compute(resarr) };
你也可以用這種雜湊表的形式
let map = { //你也可以用這種雜湊表的形式 '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz', }
如果喜歡或者想要更多的資訊,可以戳這裡 ,歡迎star