LeetCode Letter Combinations of a Phone Number (DFS)

本文介绍了一种解决电话号码对应字母组合问题的算法实现。通过深度优先搜索(DFS)的方法,递归地构建所有可能的字母组合。文章提供了一个C++实现的例子,并详细展示了如何利用数字到字母的映射表进行遍历。

题意

Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
200px-Telephone-keypad2.svg.png
给定数字,输出所有可能的字母组合

解法

可以先将数字对应的字母存好,然后遍历输出就可以。只不过不用递归来写好像比较麻烦,这里用了一个DFS。

class Solution
{
public:
    vector<string> letterCombinations(string digits)
    {
        static vector<vector<char>> table = {
                                {},{},
                            {'a','b','c'},
                            {'d','e','f'},
                            {'g','h','i'},
                            {'j','k','l'},
                            {'m','n','o'},
                            {'p','q','r','s'},
                            {'t','u','v'},
                            {'w','x','y','z'}
                            };
        vector<string>  rt;
        string  temp;
        dfs(digits,table,rt,0,digits.size(),temp);
        return  rt;
    }

    void    dfs(string digits,vector<vector<char>> table,vector<string> & ans,int k,int length,string temp)
    {
        if(k >= length && temp.size())
        {
            ans.push_back(temp);
            return;
        }

        for(int i = 0;i < table[digits[k] - '0'].size();i ++)
        {
            temp += table[digits[k] - '0'][i];
            dfs(digits,table,ans,k + 1,length,temp);
            temp.pop_back();
        }
    }
};

转载于:https://www.cnblogs.com/xz816111/p/5857220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值