问题
https://leetcode.com/problems/letter-combinations-of-a-phone-number/
解法
回溯法, 递归
class Solution {
public:
void lc(vector<string>& ret, char* s, int sCnt, const char* digits, int depth)
{
if (digits[depth] == 0)
{
if (sCnt== 0)
return;
s[sCnt] = 0;
string now(s);
ret.push_back(now);
return;
}
if (digits[depth] < '2')
{
lc(ret, s, sCnt, digits, depth+1);
return;
}
char start, end;
switch(digits[depth])
{
case '7':
start = 'p';
end = 't';
break;
case '8':
start = 't';
end = 'w';
break;
case '9':
start = 'w';
end = 'z'+1;
break;
default:
start = (digits[depth]-'2') * 3+ 'a';
end = start +3;
break;
}
for (char c = start; c<end; c++)
{
s[sCnt] = c;
lc(ret, s, sCnt+1, digits, depth+1);
}
}
vector<string> letterCombinations(string digits) {
char s[digits.size()+1];
vector<string> ret;
lc(ret, s, 0, digits.c_str(), 0);
return ret;
}
};