码迷,mamicode.com
首页 > 其他好文 > 详细

17. 电话号码的字母组合(递归+回溯)

时间:2020-06-08 19:01:18      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:mis   ems   tco   loading   代码   src   i++   back   cto   

题目描述

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. 电话号码的字母组合(递归+回溯)

标签:mis   ems   tco   loading   代码   src   i++   back   cto   

原文地址:https://www.cnblogs.com/baboon/p/13067507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!