Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
中心思想:
先将每一个digit转换成的string存在一个vector中,然后用dfs算出所有组合。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
vector<string> tmp;
int n = digits.size();
if (n == 0)
return result;
for (int i = 0; i < n; i++){
switch (digits[i]){
case '2':
tmp.push_back("abc");
break;
case '3':
tmp.push_back("def");
break;
case '4':
tmp.push_back("ghi");
break;
case '5':
tmp.push_back("jkl");
break;
case '6':
tmp.push_back("mno");
break;
case '7':
tmp.push_back("pqrs");
break;
case '8':
tmp.push_back("tuv");
break;
case '9':
tmp.push_back("wxyz");
break;
default:
return result;
}
}
string comb;
dfs(tmp, 0, comb, result);
return result;
}
void dfs(vector<string>& tmp, int pos, string& comb, vector<string>& result){
//recursion先写base case, end case
if (pos >= tmp.size()){
result.push_back(comb);
return;
}
int m = tmp[pos].size();
string s = tmp[pos];
for (int i = 0; i < m; i++){
comb.push_back(s[i]);
dfs(tmp, pos+1, comb, result);
comb.pop_back();
}
}
};