题解:
回溯三部曲:
1、确定回溯函数的参数
2、确定回溯终止条件
字符串str的size等于所提供数字个数n时
3、确定单层搜索过程
确定数字对应的字符集,for循环横向遍历当前数字对应的字符串,递归处理下一个数字
class Solution {
public:
vector<string> result;
string str;
vector<string> letters = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//n为输入数字的长度 即符合条件的字母组合长度
//index记录遍历第几个数字
void backtracking(string digits,int index){
if(index == digits.size()){
result.push_back(str);
return;
}
//单层搜索过程
//将digits中的字符转为数字
int num = digits[index]-'0';
//该数字对应的字符串
string letter = letters[num];
for(int i = 0;i<letter.length();i++){
//处理
str.push_back(letter[i]);
//回溯 下一层要处理下一个数字
backtracking(digits,index+1);
str.pop_back();
}
return;
}
vector<string> letterCombinations(string digits) {
if(digits == ""){
return result;
}
int n = digits.length();
backtracking(digits,0);
return result;
}
};