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.
思路:这也是一道DFS题。可用一个dict数组,key表示数字,value表示数字所代表的字符串。然后对数字字符串搜索。代码如下:
class Solution {
private:
vector<string> dict;
vector<string> res;
string perRes;
public:
void letterCombinationsHelper(int pos, int n, int left, string digits)
{
if (pos == n)
{
res.push_back(perRes);
}
else
{
int i,j;
for(i=0; i<n; ++i)
{
if(i>left)
{
for(j=0; j<dict[digits[i]-'0'].length(); j++)
{
perRes[pos] = dict[digits[i]-'0'][j];
letterCombinationsHelper(pos+1,n,i,digits);
}
}
}
}
}
vector<string> letterCombinations(string digits) {
dict.resize(10);
res.clear();
int i;
dict[0] = "";
dict[1] = "";
for(i=2; i<=6; ++i)
{
dict[i] = "";
dict[i] += 'a' + (i-2)*3;
dict[i] += 'a' + (i-2)*3 + 1;
dict[i] += 'a' + (i-2)*3 + 2;
}
dict[7] = "pqrs";
dict[8] = "tuv";
dict[9] = "wxyz";
int digit[10];
memset(digit, 0, sizeof(digit));
if (digits.empty())
{
res.push_back("");
return res;
}
int len = digits.length();
perRes.clear();
perRes.resize(len);
letterCombinationsHelper(0, len, -1, digits);
return res;
}
};