问题描述:
手机键盘上的数字对应着若干个字母,输入一组由数字组成的字符串,对应输出相应的字母的所有可能组合,顺序不限
解题思路:
- 暴力破解可以得到结果
- 相当于遍历一棵树,可以使用树的遍历算法DFS
25 / 25 test cases passed.
| |
Runtime:
3 ms
|
vector<string> numbers_alphabet;
class Solution
{
public:
vector<string> DFS(int index, vector<string> result)
{
string temp = numbers_alphabet[index];
vector<string> tempRes;
for(unsigned int i=0; i< temp.length(); ++i)
{
for(size_t n=0;n< result.size(); ++n)
{
string newStr = " ";
newStr = result[n] + temp[i];
tempRes.push_back(newStr);
}
}
result.clear();
result = tempRes;
tempRes.clear();
return result;
}
vector<string> letterCombinations(string digits)
{
numbers_alphabet.push_back("");
numbers_alphabet.push_back("");
numbers_alphabet.push_back("abc");
numbers_alphabet.push_back("def");
numbers_alphabet.push_back("ghi");
numbers_alphabet.push_back("jkl");
numbers_alphabet.push_back("mno");
numbers_alphabet.push_back("pqrs");
numbers_alphabet.push_back("tuv");
numbers_alphabet.push_back("wxyz");
vector<string> result;
if(digits.empty()){
return result;
}
string initRes = numbers_alphabet[(int)(digits[0]-'0')];
for(unsigned int i = 0; i<initRes.length(); ++i)
{
string t = "";
result.push_back(t+initRes[i]);
}
for(unsigned int j=1; j<digits.length(); ++j)
{
result = DFS((int)(digits[j]-'0'),result);
}
return result;
}
};