在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣(LeetCode)

思路:既然要排列组合,就得先根据数字字符取出来

所以先定义一个string类的数组通过下标取到每个数字对应的映射。

string _numsTostr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

接下来便是:想到如果可以用递归,把每次组合的值返回(追加)到一个vector<string>对象中,且能回到上一个位置继续,就能将全排列搞定。

因为通过di下标访问数组,所以当di==digits.size()时,得到字符串,尾插到v中,返回上一级。

可以通过for循环访问每一个数字映射的全部字符。

class Solution 
{
public:
    string _numsTostr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    void Combine(const string& digits,int di,string cbstr,vector<string>& v)
    {
        if(di==digits.size())
        {
            v.push_back(cbstr);
            return;
        }
        int num = digits[di]-'0';
        string str = _numsTostr[num];

        for(int i=0;i<str.size();i++)
        {
            Combine(digits,di+1,cbstr+str[i],v);
        }
    }

    vector<string> letterCombinations(string digits) 
    {
        vector<string> v;
        if(digits.empty())
        {
            return v;
        }
        Combine(digits,0,"",v);
        return v;
    }
};

注意:1.main函数加个if是因为防止用户输入为空,进到Combine里还会通过if尾插。

           2.其中的参数cbstr是保存每一次最后的字符串,把他尾插到v里,而递归往下走时的每一层字符由str加到cbstr里。

           3.这里传的参数v,加了引用,目的是直接加到外面要返回的v里。


附上一部分自己画的递归展开图,方便理解。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 22:36:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 22:36:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 22:36:04       87 阅读
  4. Python语言-面向对象

    2023-12-09 22:36:04       96 阅读

热门阅读

  1. 为什么我会选择学习Go呢?

    2023-12-09 22:36:04       60 阅读
  2. Linux下的软硬链接

    2023-12-09 22:36:04       55 阅读
  3. Python小技巧1:for循环的if...else条件判断

    2023-12-09 22:36:04       54 阅读
  4. React都有哪些hooks?

    2023-12-09 22:36:04       57 阅读
  5. python basic3-zstarling

    2023-12-09 22:36:04       54 阅读
  6. linux 常用指令目录大纲

    2023-12-09 22:36:04       55 阅读
  7. 截取字符串

    2023-12-09 22:36:04       52 阅读
  8. 每天一点python——day90

    2023-12-09 22:36:04       61 阅读
  9. 华纳云:linux搭建web服务器流程是怎样的

    2023-12-09 22:36:04       56 阅读
  10. LeetCode算法练习top100:(7)递归回溯

    2023-12-09 22:36:04       41 阅读
  11. Qt event事件发送

    2023-12-09 22:36:04       54 阅读