原題:
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.
思路:涉及到排列組合問題,使用遞歸專門處理組合問題。一開始老是runtime error,主要問題出在string char以及const char的轉換上,比較煩人。思路比較簡單的。
代碼:
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res, tmp;
if(digits.size()==0) {
string str = "";
res.push_back(str);
return res;
}
for (int i = 0; i<digits.size(); i++){
string accord = digitString(digits[i]);
tmp.push_back(accord);
}
return makecombine(tmp.begin(),tmp.end());
}
vector<string> makecombine(vector<string>::iterator first, vector<string>::iterator last){
vector<string> res,tmp;
if(first==last) return res;
tmp = makecombine(first+1,last);
for(string::iterator it = (*first).begin(); it!=(*first).end(); it++){
if(tmp.empty()) {
string t = "";
t = t + *it;
res.push_back(t);
}
else {
for(int j = 0; j<tmp.size(); j++){
string t = "";
t = *it;
t = t+tmp[j];
res.push_back(t);
}
}
}
return res;
}
string digitString(char a){
string str= "";
if (a-'0'==0) str =' ';
else if(a -'0'== 1) ;
else if(a -'0'== 2) str = "abc";
else if(a -'0'== 3) str = "def";
else if(a -'0'== 4) str = "ghi";
else if(a -'0'== 5) str = "jkl";
else if(a -'0'== 6) str = "mno";
else if(a -'0'== 7) str = "pqrs";
else if(a -'0'== 8) str = "tuv";
else if(a -'0'== 9) str = "wxyz";
return str;
}
};
AC來的太突然受寵若驚- 。-