[Description]
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"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
[Solution]
/*class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> ret;
if(0 >= digits.size()) return ret;
const string map[]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
backTrackingFun(map,digits,"",ret);
return ret;
}
void backTrackingFun(const string m[], const string &digits, string r, vector<string> &ret){
int c=r.size();
if(digits.size()==c){
ret.push_back(r);
return;
}
auto str = m[digits.at(c)-48];
for(auto it=str.cbegin();it!=str.cend();++it){
r.push_back(*it);
backTrackingFun(m,digits,r,ret);
r.pop_back();
}
}
};*/
class Solution {
static string letter[10];
vector<string> res;
public:
vector<string> letterCombinations(string digits) {
if(digits.empty())
return res;
string str;
combine(digits, 0, str);
return res;
}
void combine(string &digits, int i, string str) {
if(i>=digits.size()) { // 递归终止条件
res.push_back(str);
return;
}
string s = letter[digits[i]-'0'];
for (int j = 0; j < s.size(); ++j)
combine(digits, i+1, str+s[j]);
}
};
string Solution::letter[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};