17. 电话号码的字母组合(递归+回溯)
Posted baboon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17. 电话号码的字母组合(递归+回溯)相关的知识,希望对你有一定的参考价值。
题目描述
leetcode - 17:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/submissions/
解题关键
- 递归
- 回溯
碎碎念
感觉就是一个递归加回溯。
把digits列出的数字键按顺序递归dfs下去,每个按键因为有多个字母,所以拼完一个字符串后要回溯拼下一个字母,所以用了个for循环。
代码
string pos[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
void dfs(string digits,int depth,vector<string>& ans,string tmp){
// 如果达到了最深,把答案放进去,并回溯
if(depth == digits.size()) {
ans.push_back(tmp);
return;
}
// 获取当前按键中的字母
int key = digits[depth]-‘0‘;
string nums = pos[key];
for(int i =0;i<nums.size();i++){
// 回溯后会将按键中下一个字母放入,并继续递归下一个按键
dfs(digits,depth+1,ans,tmp+nums[i]);
}
}
vector<string> letterCombinations(string digits) {
vector<string> ans;
if(digits.size() == 0) return ans;
dfs(digits,0,ans,"");
return ans;
}
以上是关于17. 电话号码的字母组合(递归+回溯)的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 17. 电话号码的字母组合----回溯算法
Leetcode17. 电话号码的字母组合(HashMap+深搜回溯)