电话号码的字母序列

题目描述

输入一个仅包含数字 2-9 的字符串,输出所有它能表示的字母序列。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
0

输入

输入一个包含数字 2-9 的字符串,长度不超过6。

输出

按字典序输出所有能表示的字母序列,每行输出一个。

输入样例

23

输出样例

ad
ae
af
bd
be
bf
cd
ce
cf

解题思路

1.组合问题想回溯
2.一个回溯函数,一个返回结果的函数

题解

#include <iostream>
#include <map>
#include <vector>

using namespace std;

class Solution{
//首先保存数字与字母之间的映射
//使用private保护数据
private:
    //使用二维数组
    const string num_letter[10]={
        "",//0
        "",//1
        "abc",//2
        "def",
        "ghi",
        "jkl",
        "mno",
        "pqrs",
        "tuv",
        "wxyz",
    };


//接口函数,public
public:
    //记录临时结果
    string s;
    //记录最终结果,要注意results包含多个字符组合,所以是用vector类型
    vector<string> result;

    //先定义回溯函数,其实就是递归函数啦~
    void backtracking(const string& digits,int index){

        //终止条件
        if(index==digits.size()){
            //最终结果
            result.push_back(s);
            return;

        }

        int digit=digits[index]-'0';//这一部非常重要,是把index指向的数字字符串转成了int类型
        string letters=num_letter[digit];//取相应字符串

        for(int i=0;i<letters.size();i++){
            s.push_back(letters[i]);
            backtracking(digits,index+1);
            s.pop_back();

        }
    
    }

    //使用回溯函数,返回最终结果
    vector<string> conbination(const string& digits){
        s.clear();
        result.clear();
        if(digits.size()==0){
            return result;
        }
        backtracking(digits,0);
        return result;

    }

};


int main(){
    Solution solution;
    
    string digits;
    cin >> digits;  // 从标准输入读取数字字符串
    
    vector<string> result = solution.conbination(digits);
    
    // 按行输出每一个字母组合
    for (const string& combination : result) {
        cout << combination << endl;
    }
    
    return 0;

}
posted @ 2024-11-29 20:39  Chunleiii  阅读(6)  评论(0编辑  收藏  举报