【每日打卡】Day20:电话号码的字母组合 C++实现

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40184885/article/details/90065320

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

示例:

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

思路:

建立一个字典,确定每个数字对应的字符串。使用一个字符串temp用于缓存,一个下标量用于判断缓存字符串长度,搜索所有可能的组合情况。

代码:

#include <bits/stdc++.h>
using namespace std;

map<char,string> dict;  //创建一个字典 存储每个数字对应的字符串
int size = 0;   vector<string> ans;
string s = "";
//初始化字典
void init(){
    dict['2'] = "abc"; dict['3'] = "def"; dict['4'] = "ghi";
    dict['5'] = "jkl"; dict['6'] = "mno"; dict['7'] = "pqrs";
    dict['8'] = "tuv"; dict['9'] = "wxyz";
}
//DFS方式求组合数
void dfs(string temp, int k){
    if(k == size){
        ans.push_back(temp);
        return;
    }
    for(int i = 0; i < dict[s[k]].size(); i ++){
        dfs(temp+dict[s[k]][i],k+1);  
        
    }
}

vector<string> letterCombinations(string digits){
    init();
    if(digits.size() == 0)
        return ans;
    s = digits; size = digits.size();
    dfs("",0);
    return ans;
}

int main(){
    string str;
    cin >> str;
    vector<string> r = letterCombinations(str);
    for(int i = 0; i < r.size(); i ++)
        cout << r[i] << " ";
    return 0; 
}

 

展开阅读全文

没有更多推荐了,返回首页