天天看點

HOT100——電話号碼的字母組合(JS實作)

題目描述

HOT100——電話号碼的字母組合(JS實作)

解題思路

  • 本題采用的是DFS的解題思路。
  • 本題的特點在于遞歸中有循環。
  • DFS函數接收兩個參數,一個是目前字元串,一個是指針,當指針超過了digits的長度的時候,說明可以存儲并傳回了,然後上一層循環繼續周遊下一個字元,真的很奇妙。

解題代碼

var letterCombinations = function(digits) {
    // 邊界條件
    if (digits === '') return [];
    // 建構2-9對應字元的哈希表
    const m = new Map();
    m.set('2','abc');
    m.set('3','def');
    m.set('4','ghi');
    m.set('5','jkl');
    m.set('6','mno');
    m.set('7','pqrs');
    m.set('8','tuv');
    m.set('9','wxyz');
    
    // 定義傳回的數組
    const res = [];
    // 使用DFS的思想
    function dfs(str,pointer) {
        // 遞歸的結束條件
        if (pointer > digits.length-1) {
            res.push(str);
            return;
        }
        let letters = m.get(digits[pointer]);
        for (let v of letters) {
            dfs(str + v,pointer + 1);
        }
        return;
    }
    dfs('',0)
    return res
};
      

啟示

  • 學會DFS的思想。
  • 在DFS中加入循環是解決這類問題的好方法。

參考連結

leetcode-cn.com/problems/le…

繼續閱讀