回溯算法例题----电话号码的字母组合

Posted 4nc414g0n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯算法例题----电话号码的字母组合相关的知识,希望对你有一定的参考价值。

电话号码的字母组合

方法1:回溯

题目链接
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母


思路

  1. 如果只输入一个2-9的数只需要一层循环:
    for(auto e :arr[digits[index]-'0'])
  2. 如果输入两个2-9的数只需要两层层循环:
    for(auto e :arr[digits[index]-'0'])

    -----------------for(auto e :arr[digits[index+1]-'0'])
  3. 如果输入三个2-9的数只需要两层层循环:
    for(auto e :arr[digits[index]-'0'])

    -----------------for(auto e :arr[digits[index+1]-'0'])
    ----------------------------------for(auto e :arr[digits[index+2]-'0'])
  4. 输入的个数就是嵌套循环的个数
    递归解决(注意for循环里的递归pop不要丢了

代码如下:

class Solution 
public:
   vector<vector<string>> arr="","","a","b","c","d","e","f","g","h","i",
           "j","k","l","m","n","o","p","q","r","s",
           "t","u","v","w","x","y","z";
   //全局ret的vector<string>
   vector<string> ret;
   void Recursive(string& digits,string& s,int index) 
   
       if(index==digits.size())
       
           ret.push_back(s);
           return;
          
       else
       
           for(auto e :arr[digits[index]-'0'])
           
               s+=e;
               Recursive(digits,s,index+1);
               s.pop_back();
                      
       
   
   vector<string> letterCombinations(string digits) 
       if(digits.size()==0)
       
           return ret;
       
       int length=digits.size()-1;
       string s;
       Recursive(digits,s,0);
       return ret;
   
;

方法2:队列

参考:题解

以上是关于回溯算法例题----电话号码的字母组合的主要内容,如果未能解决你的问题,请参考以下文章

初识“回溯算法”讲解及LeetCode对应例题解析

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

leetcode 17. 电话号码的字母组合----回溯算法

回溯算法之电话号码的字母组合

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

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