给定一个仅包含数字
2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
解法 dfs回溯
思路
先思考递归结束条件,什么时候会结束呢,就是到 digits 最后一位长度的的时候,index 指的就是当前电话号码的索引,从 0 开始。
接下来遍历当前电话号码上的按键,加入 path ,接下来递归下一位,然后回溯。
代码
function letterCombinations(digits: string): string[] {
const numberMap = {
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8": "tuv",
"9": "wxyz"
};
const result = [];
if (!digits.length) return result;
const n = digits.length;
const dfs = (path, index) => {
if (index === n) {
result.push(path.join(""));
return;
}
const str = numberMap[digits[index]];
for (let char of str) {
path.push(char);
dfs(path, index + 1);
path.pop();
}
};
dfs([], 0);
return result;
};
时空复杂度
时间复杂度:O(k^n) k 是每个按键的可能,最坏为 4
空间复杂度:O(n * k^n) 递归 n 层,数组存储了 O(k^n) 字符串