leetcode17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。


示例:

1
2
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]


分析:

1
2
3
4
5
6
DFS核心:
- 搜索顺序
- 剪枝

1、画出递归树
2、发现需要统计路劲path,同时要知道某个位置的字母u

代码

  • C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
vector<string> ans;
string strs[10] = {
"", "", "abc", "def",
"ghi", "jkl", "mno",
"pqrs", "tuv", "wxyz",
};

void dfs(string& digits, int u, string path) {
if (u == digits.size()) {
ans.push_back(path);
path.clear();
return;
}

for (char& c : strs[digits[u] - '0']) {
path = path + c;
dfs(digits, u + 1, path);
path.pop_back();
}
}

vector<string> letterCombinations(string digits) {
if (digits.size() == 0) return {};
dfs(digits, 0, "");

return ans;
}
};

[原题链接](17. 电话号码的字母组合 - 力扣(Leetcode))

0%