一.题目连接:git
https://leetcode.com/problems/letter-combinations-of-a-phone-number/数组
二.题目大意:code
给定一段数字字符串,其中每一个数字字符对应了以下的字母字符,求出输入字符串对应的全部可能的字母字符串集合。blog
例如,输入数字字符串"23",其对应的全部可能的字母字符串集合为 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]leetcode
三.题解:字符串
这道题目直接根据题意来作便可,至关于每一个数字字符对应若干个字母字符,把这些全部可能的字母组合存储起来便可,本体代码以下 (本题的思想不难理解,关键是这个实现的过程,须要仔细琢磨下):get
class Solution { public: vector<string> letterCombinations(string digits) { string dic[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector<string> res; if(digits == "") return res; res.push_back("");//初始化结果数组 int d_len = digits.size(); for(int i = 0; i < d_len; i++) { vector<string> tmp;//用于扩充结果的中间变量 string str = dic[digits[i] - '0']; if(str == "") continue; for(int j = 0 ; j < str.size(); j++) for(int k = 0; k < res.size(); k++) tmp.push_back(res[k] + str[j]);//对res数组的每一个元素附上新的字母字符 res = tmp;//每次中间处理完以后,交换结果 } return res; } };
注意:string
1.当输入的数字字符串为空时,最终返回的字符字符串集合为空,因此这里须要特判一下。it
2.初始时res数组必须有一个“”,这样作的目的是为了方便后续将res数组进行扩充,由于后续的扩充操做实际上就是在res数组原有的每一个元素基础上附加上新的字母字符,而且这个过程由tmp数组来实现,最终将tmp数组的结果赋值给res数组做为最终的结果。io