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.
思路
很简单的思路,就是按照顺序输出就行了,就是有一个比较方便的数据结构可以把一个字符串复制一下然后加上另外的字符,然后push回去。还是用buffer比较好,避免了对变长vector的遍历。他的一个测试案例是""输入,然后要[""]输出,表示不能理解,不是应该输出是[]么?
class Solution {
public:
vector<string> letterCombinations(string digits) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
char map[][5]={" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
queue<string> buff;
buff.push("");
int validlength=0;
for(int i = 0; i < digits.length(); i++)
{
if(digits[i] != '1') validlength++;
else continue;
for(int j = 0; j < buff.size(); j++)
{
string curr = buff.front();
if(curr.length() != validlength - 1) break;
buff.pop();
for(int k = 0; map[digits[i]-'0'][k] != '\0'; k++)
{
string tmp(curr+map[digits[i]-'0'][k]);
buff.push(tmp);
}
}
}
vector<string> res;
while(buff.size() != 0)
{
string tmp=buff.front();
res.push_back(tmp);
buff.pop();
}
return res;
}
};