LeetCode 17.电话号码的字母组合 C++写法

LeetCode 17.电话号码的字母组合 C++写法

image-20240730124224233

思路🧐:

   使用深度优先搜索+递归进行解题。首先建立一个号码与字母的映射表,当接收传过来的号码字符串时减去字符0就可以拿到该号码。其次使用string存储当前号码所对应字母,然后for循环遍历字母并进行递归拼接,递归结束条件为当遍历完最后一个号码时,对存储字母组合的vector进行尾插取到该轮递归的字母组合。当该轮递归结束后,第一个号码的下一个字母开始递归,此时i和combination都已经重新变为第一次调用时的数据,依照该顺序又开始新一轮递归,直到组合完所有字母。image-20240730132733409

代码🔎:

class Solution {
public:
    const char* LetterArr[10]= {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    void Combination(string digits,size_t i,string combination, vector<string>& str)
    {
        if(i == digits.size()) //当遍历完最后一个号码对应字母就尾插拼接
        {
            str.push_back(combination);
            return;
        }
        int num = digits[i] - '0'; //取号码
        string ch = LetterArr[num]; //取号码所对应字母
        for(auto s : ch)
        {
            Combination(digits,i + 1,combination + s,str); //开始递归,i为号码下标,combination+s为拼接的字母
        }
    }
    vector<string> letterCombinations(string digits) {
        vector<string> str; //存储字母组合
        if(digits.empty()) //为空直接返回
            return str;
        string combination; //存储拼接的字母
        Combination(digits,0,combination,str);
        return str;
    }
};

image-20240730132921012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A.A呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值