题目描述
输入一个仅包含数字 2-9 的字符串,输出所有它能表示的字母序列。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
输入
输入一个包含数字 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;}