此题是非常经典的递归回溯法,
递归代码
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
string temp(digits.size(), ' ');
letterCombinationsHelper(digits, 0, temp, res);
return res;
}
void letterCombinationsHelper(string &digits, int index, string &temp, vector<string> &res)
{
string nummap[] = {" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
if(index==digits.size())
{
res.push_back(temp);
return ;
}
for(int i = 0; i < nummap[digits[index]-'0'].size(); ++i)
{
temp[index] = nummap[digits[index]-'0'][i];
letterCombinationsHelper(digits, index+1, temp, res);
}
}
};
非递归运算
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
string nummap[] = {" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<int> indexNum(digits.size(), 0);
while(true)
{
string temp(digits.size(), ' ');
for(int i = 0; i < digits.size(); ++i)
temp[i] = nummap[digits[i]-'0'][indexNum[i]];
res.push_back(temp);
int k = digits.size()-1;
while(k>=0)
{
if(indexNum[k] < nummap[digits[k]-'0'].size()-1)
{
indexNum[k]++;
break;
}
else
{
indexNum[k] = 0;
k--;
}
}
if(k<0)
break;
}
return res;
}
};
参考http://www.cnblogs.com/TenosDoIt/p/3771254.html