• 力扣:17-电话号码的字母组合


    题目描述

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

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

     

    示例 1:

    输入:digits = "23"
    输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]


    示例 2:

    输入:digits = ""
    输出:[]


    示例 3:

    输入:digits = "2"
    输出:["a","b","c"]
     

    提示:

    0 <= digits.length <= 4
    digits[i] 是范围 ['2', '9'] 的一个数字。

    来源:力扣(LeetCode)

    解题思路

    这道题我首先就想到了DFS, 思路就是先获得题目所给字符串的长度n,这个长度就是我们深搜的层数,我们从第0层搜到第n层也就搜完了。我们怎么保存字符串呢?建立一个vector和一个字符串,向下搜之前把当前字符加入到字符串中,搜完把这个字符串加入到vector当中,同时让字符出去,这样就保存了字符串。这道题难度也不是很大,会运用深搜就行

    代码实现

    1. class Solution {
    2. vectorv={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    3. public:
    4. vector letterCombinations(string digits) {
    5. int n=digits.size();//获得题目所给字符串的长度
    6. vectorans;//最后返回的数组
    7. if(n==0)
    8. return ans;
    9. string p;
    10. dfs(0,n,ans,p,digits);//深搜
    11. return ans;
    12. }
    13. void dfs(int u,int n,vector&ans,string &p,string digit)
    14. {
    15. if(u>=n)//结束条件
    16. {
    17. ans.push_back(p);
    18. return;
    19. }
    20. string t=v[digit[u]-'0'];
    21. for(int i=0;isize();i++)
    22. {
    23. p.push_back(t[i]);
    24. dfs(u+1,n,ans,p,digit);
    25. p.pop_back();
    26. }
    27. }
    28. };
  • 相关阅读:
    大疆面试笔试一部分总结
    OpenLayers构建4490坐标系地图解决方案
    独特思路分析WPF架构
    C++智能指针(二)——weak_ptr初探
    seaborn barplot画图总结
    CanOpen协议的伺服驱动控制
    java多线程使用详解与案例,超详细
    原创: 重构证据定义以消解贝叶斯确证逻辑的内在矛盾
    3. Android逆向-基于Frida的工具Objection
    代码随想录day31
  • 原文地址:https://blog.csdn.net/qq_52905520/article/details/126601811