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+深搜回溯)

递归与回溯12:电话号码问题

leetcode 每日一题 17. 电话号码的字母组合

[回溯算法]leetcode17. 电话号码的字母组合(c实现)

Hot10017. 电话号码的字母组合