Const
如果我们把digits转换成对应字母后。实际上题目求的就是从每个字母中选一个字母,然后组合成一个字符串。 这道题是一道组合型回溯题。
用一个path数组记录递归路径上枚举的字母。
回溯三问**
function letterCombinations(digits: string): string[] {
if (digits.length === 0) {
return [];
}
const mapping = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'];
const path: string[] = [];
const ans: string[] = [];
function dfs(i: number) {
if (i === digits.length) {
ans.push(path.join(''));
return;
}
const letters = mapping[+digits[i]];
for (const c of letters) {
path[i] = c;
// 既然枚举完path[i]了,接下来要枚举path[i+1]
dfs(i + 1);
}
}
dfs(0);
return ans;
};
17.电话号码的字母组合
给定一个仅包含数字
2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:
digits = "23"
输出:
["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:
digits = ""
输出:
[]
示例 3:
输入:
digits = "2"
输出:
["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i]
是范围 ['2', '9'] 的一个数字