您的位置:首页 > 其它

17. Letter Combinations of a Phone Number

2016-09-18 15:03 302 查看
17. Letter Combinations of a Phone Number

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.
digits里的每个字符可能对应多种不同的选择,假设digits的长度为n,生成的字符
串s也应有n个,s[i]与digits[i]对应,但s[i]的选择很多。有点类似于排列问题。

class Solution {
//将数字转化成相应的字母串
string dtoa(char digit)
{
string s;
switch(digit)
{
case '2': s="abc"; break;
case '3': s="def";break;
case '4': s="ghi";break;
case '5': s="jkl";break;
case '6': s="mno";break;
case '7': s="pqrs";break;
case '8': s="tuv";break;
case '9': s="wxyz";break;
case '0': s="-";break;
case '1':s="@";break;
}
return s;
}
//采用深度优先搜索,start指digits字符串的第start个字符,s是一个可能结果,r是所有的结果
void DFS(string digits, int start,string & s, vector &r)
{
if(digits.size()==0)//如果没有digits,直接返回
return ;
else
if(s.size()==digits.size())//当s.size()与digits.size()相等时,得到一个解
{
r.push_back(s);
return;
}else
{
string tmp=s;//用来回溯,当DFS(digits,start+1,s,r)完成后,s要恢复原样
string t=dtoa(digits[start]);//将数字转换成字符串
for(int j=0;j letterCombinations(string digits) {
vector r;
string s;
DFS(digits,0,s,r);//从digits的第一个字符digits[0]开始递归调用
return r;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: