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

题目如下:

解题思路:

因为不确定字符串的长度,所以用递归 Recursion 来解。首先建立一个字典 dict_map,保存每个数字所代表的字符串;然后还需要一个变量 level,记录当前遍历字符串中的位置。

  • 在递归函数中首先判断 level,如果跟 digits 中数字的个数相等了,将当前的组合加入结果 res 中,然后返回。
  • 否则通过 digits 中的数字到 dict_map 中取出字符串,然后遍历这个取出的字符串,将每个字符都加到当前的组合后面,并继续递归调用函数即可。

代码如下:

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        //排除字符串为空的情况
        if(digits.empty())
            return {};
        //通过哈希表建立映射关系(字典)
        std::map<char, string> num_map {
            {'2',"abc"}, {'3',"def"}, {'4',"ghi"}, {'5',"jkl"},
            {'6',"mno"}, {'7',"pqrs"}, {'8',"tuv"}, {'9',"wxyz"}
        };
        vector<string> res;
        LC_DFS(digits, num_map, 0, "", res);
        return res;
    }
    
    //level记录当前递归的层数(对应digits中的第几个数)
    void LC_DFS(string digits, map<char,string> dict_map, int level, string out, vector<string>& res){
        if(level == digits.size()){
            res.push_back(out);
            return ;
        }
        string str = dict_map[digits[level]];
        //递归调用
        for(int i = 0; i < str.size(); i++){
            LC_DFS(digits, dict_map, level+1, out+str[i], res);
        }
    }
};

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值