题目
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”].
分析
这个也是用到DFS,这是自己写的比较快的一个程序,因为之前被虐的够惨,像Permutation 系列,N-Queens 系列都是这个套路。
递归解决问题,不过我写的函数总是参数特别多。
值得一提的是,在这个函数里第一次用到string 的push_back() 和 pop_back()函数,原本以为只有vector 才有,是我孤陋寡闻了·······
实现
class Solution {
public:
vector letterCombinations(string digits) {
//存放结果序列
vector<string> result;
if (digits.length() == 0)
return result;
//索引
string dict[] = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//中间结果,也就是一个string
string subResult="";
letterCombinationsDFS(result,dict,digits,subResult,0);
return result;
}
void letterCombinationsDFS(vector<string>& result,string *dict,string& digits,string& subResult,int num)
{
if (num == digits.length())
{
result.push_back(subResult);
return;
}
else
{
string tmp = dict[digits[num] - '2'];
for (int i = 0; i < tmp.length(); i++)
{
//向string 的end 添加一个字符
subResult.push_back(tmp[i]);
letterCombinationsDFS(result, dict, digits, subResult, num + 1);
//从string的末端删除一个字符
subResult.pop_back();
}
}
}
};