题目: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”].
思路如下:
- 把数字表示的字符映射到数组中,初始化result为{“”}。
- 对每一个digit[i]中的数字字符:
- 取result的队首元素,分别与digit[i]中的每个字符连接,放入队列,并删除该队首元素。
注意要先判断digits是否为空,然后再初始化result,测试用例第一个就是digits为空。
C++代码如下:
vector<string> letterCombinations(string digits) {
vector<string> result;
if (digits.empty())
return result;
result.push_back("");
vector<string> letter = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
for (int i = 0; i < digits.size(); i++)
{
int sz = result.size(); //一定先记录下当前result的size,否则会陷入死循环,因为下面的操作会改变result的size.
for (int j = 0; j < sz; j++)
{
string temp = result[0];
result.erase(result.begin());
for (int k = 0; k < letter[digits[i] - '0'].size(); k++)
{
result.push_back(temp + letter[digits[i] - '0'][k]);
}
}
}
return result;
}