题目
递推
首先哈希记录一下每个数字对应的字母,然后遍历给定的数字串,每遍历一次就将该数字对应字母的所有排列加在上一个字母遍历后的串上即可。
时间复杂度
O
(
3
m
×
4
n
)
O(3^m\times4^n)
O(3m×4n) ,空间复杂度
O
(
3
m
+
4
n
)
O(3m+4n)
O(3m+4n) ,m 、n 分别表示 3 个字母的数字个数和 4 个字母的数字个数。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> ans, tmp1, tmp2;
if(digits.size() == 0)
return ans;
ans.push_back("");
for(int i = 0; i < digits.size(); ++i) {
tmp1.clear();
for(char j : w[digits[i] - '0']) {
tmp2 = ans;
for(vector<string>::iterator it = tmp2.begin(); it != tmp2.end(); ++it)
(*it).push_back(j);
tmp1.insert(tmp1.end(), tmp2.begin(), tmp2.end());
}
ans = tmp1;
}
return ans;
}
private:
string w[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
};