題目描述
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…