排列问题的简化版,用stack回溯就可以了。
vector permutation(string digits)
{
char keyboard[][5] = { "abc", "def", "ghi", "jkl","mno","pqrs","tuv"
,"wxyz"};
vector st;
for(auto it = digits.begin(); it != digits.end(); ++it)
{
assert(*it >= '2' && *it <= '9');
st.push_back(keyboard[*it - '2']);
}
vector r;
while(true)
{
string temp = digits;
for(int i = 0; i < temp.length(); i++)
temp[i] = * st[i];
r.push_back(temp);
int i = (int)st.size() - 1;
while(i>=0 && *(st[i] + 1) == '\0')
i--;
if(i < 0)
break;
st[i]++;
for(int j = i+1; j < (int)st.size(); j++)
{
st[j] = keyboard[digits[j] - '2'];
}
}
return r;
}