九宫格打字。
给出一个输入数字串,输出所有可能地字符串组合
然后就跟手机键盘一样对应的字符串。
结果可以是任意顺序。
思路:
按照数学计算,假如有n个数字,每个数字分别对应??个字母,那么一共有
种字符串。通过递归找出所有的
class Solution {
public:
vector<string> letterCombinations(string digits) {
if(digits.size() == 0) return {};
vector<string>* result = new vector<string>();
map<char, vector<char>>* mapping = new map<char, vector<char>>();
(*mapping)['2'] = {'a','b','c'}; (*mapping)['3'] ={'d', 'e', 'f'};
(*mapping)['4'] = {'g', 'h', 'i'}; (*mapping)['5'] = {'j', 'k', 'l'};
(*mapping)['6'] = { 'm', 'n', 'o'}; (*mapping)['7'] = { 'p', 'q', 'r', 's'};
(*mapping)['8'] = { 't', 'u', 'v'}; (*mapping)['9'] = { 'w', 'x', 'y', 'z'};
letterCombine(result, &digits, mapping, 0, "");
vector<string> returnValue = *result;
delete mapping;delete result;
return returnValue;
}
void letterCombine(vector<string>* result, string* digits,
map<char, vector<char>>*mapping ,int n, string currentString){
if(n >= digits->size()){
result->push_back(currentString);
return;
}
vector<char> letters = (*mapping)[(*digits)[n]];
for(char c:letters){
letterCombine(result, digits, mapping, n+1, currentString+c );
}
}
};
执行用时 : 8 ms, 在Letter Combinations of a Phone Number的C++提交中击败了14.70% 的用户
内存消耗 : 8.9 MB, 在Letter Combinations of a Phone Number的C++提交中击败了0.93% 的用户
看看别人的