当前位置:   article > 正文

【leetcode C++】电话号码的字母组合

【leetcode C++】电话号码的字母组合

17. 电话号码的字母组合

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

 

 

题目链接 

. - 力扣(LeetCode)

文字 和 画图 分析

这道题明显是需要互相匹配,如 字符串 “23”, 对应 “abc” 和 “def”。

这个时候我们就想到跟循环有关,但是我们很难控制出 for循环的个数 ,所以最好的办法就是采用递归

参数我们需要:digits (含 2-9 的字符串),di(表示层数) ,

tmp (每一层对应的字符串),t (接收每一次递归结束时的字符串)

注意事项:

  1. tmp 不要传引用 ,便于递归结束时可以对应到上一层的字符串
  2. t 需要传引用 ,我们需要每一次递归结束都保留相应的字符串
  3. 递归尽量参数不要使用 +=,否则递归结束,回到上一层,参数存储的值不会变

举例(digits = "23"):

递归顺序:

代码 

  1. class Solution
  2. {
  3. private:
  4. string letter[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
  5. public:
  6. void _letterCombinations(string& digits,string tmp,int di,vector<string>& t)
  7. {
  8. if(di == digits.size())
  9. {
  10. t.push_back(tmp);
  11. return;
  12. }
  13. int n = digits[di] - '0';
  14. string s = letter[n];
  15. for(auto i : s)
  16. {
  17. _letterCombinations(digits,tmp + i,di + 1,t);
  18. }
  19. }
  20. vector<string> letterCombinations(string digits)
  21. {
  22. vector<string> t;
  23. if(digits.size() == 0)
  24. {
  25. return t;
  26. }
  27. _letterCombinations(digits,"",0, t);
  28. return t;
  29. }
  30. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/227958
推荐阅读
相关标签
  

闽ICP备14008679号