通过此题,学习回溯搜索的框架和思想
自己怎么就是想不出来怎么写,一看别人代码马上会。。
不要太多想dfs函数里的参数,先把框架打出来,然后慢慢就能明白应该写神恶魔参数
回溯框架:
void dfs(...){
if() {
...
return;
}
for(){
...
dfs()
...
}
}
一般dfs的参数有一个目前遍历到的下标idx
string 也有str.push_back(char)和str.pop_back()
class Solution {
public:
vector<string> res;
string tmp="";
map<char, string>mp;
void dfs(string digits, int idx){
if(idx==digits.length()){
res.push_back(tmp);
return;
}
for(int i=0;i<mp[digits[idx]].length();i++){
tmp.push_back(mp[digits[idx]][i]);
dfs(digits, idx+1);
tmp.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.length()==0) return res;
mp['2']="abc";
mp['3']="def";
mp['4']="ghi";
mp['5']="jkl";
mp['6']="mno";
mp['7']="pqrs";
mp['8']="tuv";
mp['9']="wxyz";
dfs(digits, 0);
return res;
}
};