Description
解题思路
1.DFS
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
string save;
if (digits.size() == 0) return vector<string>();
int convert[10] = {0, 3, 6, 9, 12, 15, 19, 22, 26};
dfs(result, save, digits, 0, digits.size(), convert);
return result;
}
void dfs(vector<string> &str, string save, string dig, int now, int size, int *convert){
if(now == size){
str.push_back(save);
return;
}
int tmp = dig[now] - '0' - 2;//change '2' to 0, '3' to 1...
for(int i = convert[tmp]; i < convert[tmp+1]; i++){
save.push_back('a' + i);//ex: a,b,c | d,e,f
dfs(str, save, dig, now + 1, size, convert);
save.pop_back();
}
}
};
2.采用迭代方法求解,以123为例
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits.size() == 0) return vector<string>();
static const vector<string> v = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> result;
result.push_back("");
for (int i = 0; i < digits.size(); i++) {
int num = digits[i]-'0';
if (num > 9 || num < 0) break;
string s = v[num];
vector<string> t;
for (int j = 0; j < s.size(); j++) {
for (int k = 0; k < result.size(); k++) {
t.push_back(result[k]+s[j]);
}
}
result.swap(t);
}
return result;
}
};