回溯法
回溯法一般采用递归法求解
- 递归终止条件 - 一般是达到问题的求解的一种可能的情况
- 调用递归函数,传入每一种可能
题目入口
题目解析
这是一道类似 全排列 的题目,可以采用回溯法求解,
关键是调用for循环,迭代每一个可能
代码
class Solution {
public:
vector<string> dict={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> letterCombinations(string digits) {
vector<string> res;
res.clear();
if(digits.size()==0) return res;
backtracking(res,digits,0,"");
return res;
}
void backtracking(vector<string>& res,string &digits,int size,string permutation){
if(size==digits.size()) {
res.push_back(permutation);
return ;
}
int digit=digits[size]-'0';
for(int i=0;i<dict[digit].size();i++){
backtracking(res,digits,size+1,permutation+dict[digit][i]);
}
}
};
思考
这里在调用函数的时候,传入的字符串应该是在源字符串的基础上加上一个字符,而不是修改该字符串