题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
样例
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
算法1
(DFS) $O(4 ^ n)$
求组合方案,dfs枚举即可。
时间复杂度
每个键至多有4个字母,所以就$O(4 ^ n)$,反正是指数级别hh。
参考文献
C++ 代码
class Solution {
private:
vector<string> num2c = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
int n;
vector<string> res;
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {};
res.clear();
n = digits.size();
string path;
dfs(digits, 0, path);
return res;
}
void dfs(const string &digits, int idx, string &path){
if (idx >= n){
res.push_back(path);
return;
}
for (char c: num2c[digits[idx] - '0']){
path += c;
dfs(digits, idx + 1, path);
path.pop_back();
}
}
};