回溯法
class Solution {
public:
vector<string> letterCombinations(string digits) {
res.clear();
if(digits.empty())
return res;
func(digits,0,"");
return res;
}
private:
//表示数字对应的字符
vector<string> table{" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> res;
//digits代表输入的数字串
//index表示当前处理第几位
//str代表index之前位数的字符串
void func(const string &digits, int index, const string &str){
//所有位数都处理完了,将字符串压入数组
if(digits.size() == index){
res.push_back(str);
return;
}
//获得数字串中的数字
char c=digits[index];
//获得对应的字符串
string letters = table[c-'0'];
//将index位上可能的字符循环接上str[0...index-1]
for(int i=0;i<letters.size();++i)
func(digits,index+1,str+letters[i]);
return;
}
};