回溯法 17. Letter Combinations of a Phone Number

本文介绍了一种使用回溯算法解决电话号码字母组合问题的方法。通过构建一个映射表将数字与对应的字母关联起来,并利用递归函数辅助生成所有可能的字母组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Solution {
public:
    map<char,string> dict;

    vector<string> letterCombinations(string digits) {        
dict[
'2'] = "abc"; dict['3'] = "def"; dict['4'] = "ghi"; dict['5'] = "jkl"; dict['6'] = "mno"; dict['7'] = "pqrs"; dict['8'] = "tuv"; dict['9'] = "wxyz"; vector<string> ans; helper(digits, digits.size(), ans); return ans; } // 先把前n-1个实现,然后在前面的结果中追加第n个数字对应的字母,就是最终的结果。 void helper(string &digits, int n, vector<string>& ans) { if(n == 0) return;
     //第n个数
char num = digits[n-1]; if(n == 1) { for(auto c:dict[num])//对每个字母 ans.push_back(string(1,c)); return; } //先获得前n-1个数字组成的字符串数组
        vector<string> a;
     helper(digits, n-1, a);
        
        for(auto c: dict[num])// 把第n-1个数字,追加到每一个
        {
            for(auto str: a)
            {
                str.push_back(c);
                ans.push_back(str);
            }
        }
    }
};

回溯就是递归。把大问题分解成小问题?不知道是怎么描述这个思想。

 

转载于:https://www.cnblogs.com/buddho/p/10616745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值