A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example:
Input: “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.
题目解析:
题目就是字母排列组合,大家学过排列组合的想必都知道,看到题目直观感受就是暴力组合。
代码:
class Solution {
public:
vector letterCombinations(string digits) {
vector res,tempRes;//返回结果
int length = digits.size();//输入长度
if(length == 0)
{
return vector();//只能返回[],不能返回"",不然无法通过测试
}
res.push_back("");//初始化
string tempStr;
map> dic;//输入号码字符集
dic.insert(pair>('1', {}));
dic.insert(pair>('2', {'a','b','c'}));
dic.insert(pair>('3', {'d','e','f'}));
dic.insert(pair>('4', {'g','h','i'}));
dic.insert(pair>('5', {'j','k','l'}));
dic.insert(pair>('6', {'m','n','o'}));
dic.insert(pair>('7', {'p','q','r','s'}));
dic.insert(pair>('8', {'t','u','v'}));
dic.insert(pair>('9', {'w','x','y','z'}));
for(int i=0;i charList = dic[digits[i]];
for(int j=0;j
特别说明:
for循环中采用了tempRes来获取最终的结果,相当于遍历出所有结果,例如:我们代码中res初始化为{""};第一次遍历的时候tempRes即为digits中第一个数值代表的字母集合,如果第一个数值是2的话,此时tempRes即为{‘a’,‘b’,‘c’},赋值给res;然后进行第二次遍历,获取第二个数值代表的字母集合,重新push到tempRes中,所以每次遍历tempRes必须清零,tempRes.clear()。
总结:最近忙新接手新项目,在新环境接受新挑战,写博客的频率,有所降低,一时反应偏慢,还得坚持,逆水行舟,不进则退,继续加油,坚持写博;上述代码属于暴力破解,递归思想,使用内存空间较多,不建议使用,大家有好的方法,欢迎给个链接。谢谢大家。