LeetCode-電話號碼的字母組合(No.17) 遞歸+hash

LeetCode 17. 電話號碼的字母組合

給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。給出數字到字母的映射如下(與電話按鍵相同)。
注意 1 不對應任何字母。

GitHub set up
示例:

輸入:"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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章