您的位置:首页 > 其它

LeetCode题解:Letter Combinations of a Phone Number

2013-10-31 03:40 465 查看

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.

思路:

迭代输入的每一种可能即可。可以认为是inorder的递归访问一个多叉树,以题目中给出的输入输出为例:

nil                     “”
2             a         b         c
3          d  e  f   d  e  f   d  e  f
|  |  |   |  |  |   |  |  |
ad ae af  bd be bf  cd ce cf


题解:

const char* key_mapper[]={
"", // 0
"", // 1
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};

class Solution {
public:
void generate_it(const string& str,
string::const_iterator iter,
string& generated,
vector<string>& ret_lib)
{
if (iter == str.cend())
{
// reached the last digit
ret_lib.push_back(generated);
return;
}
else
{
int digit = *iter - '0';
const char* ch_list = key_mapper[digit];

// enumerate substitutions
for(int i=0; i < strlen(ch_list); ++i)
{
generated.push_back(ch_list[i]);
generate_it(str, next(iter), generated, ret_lib);
generated.pop_back();
}
}
}

vector<string> letterCombinations(string digits) {
vector<string> ret;
string scratch;
generate_it(digits, digits.cbegin(), scratch, ret);
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: