Letter Combinations of a Phone Number

来源:互联网 发布:淘宝大韩泡泡糖是高仿 编辑:程序博客网 时间:2024/06/04 23:18

题目:

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.

Input:Digit string "23"Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.


思路:

首先采用map格式完成数字到号码的映射,然后采用树的深度优先搜索的方式来进行号码的组合

代码:

#include <iostream>#include <vector>#include <string>#include <map>using namespace std;class Solution {char str[100];map<int,string> mymap;//完成数字到字母的映射public:    vector<string> letterCombinations(string digits) {vector<string > ret;//存放结果if(digits.empty()) {return ret;}//在输入为“”的情况下,输出为空,没有双引号/*数字到字母的映射*/mymap[0]="";mymap[1]="";mymap[2]="abc";mymap[3]="def";mymap[4]="ghi";mymap[5]="jkl";mymap[6]="mno";mymap[7]="pqrs";mymap[8]="tuv";mymap[9]="wxyz";dfs(digits,0,digits.size(),ret);return ret;    }void dfs(string digits, int i,int len,vector<string> &ret)//深度优先搜索{if(i==len){str[len]='\0';ret.push_back(str);return;}else{for(int j=0;j<mymap[digits[i]-'0'].size();++j){str[i]=mymap[digits[i]-'0'][j];dfs(digits,i+1,len,ret);}}}};int main(){Solution s;string nums;nums="";vector<string> ret;ret=s.letterCombinations(nums);if(ret.empty()) cout<<endl;else{auto iter=ret.begin();for(;iter!=ret.end()-1;++iter)    {     cout<<"\""<<*iter<<"\""<<", ";    }cout<<"\""<<*iter<<"\""<<endl;}system("pause");return 0;}


0 0