1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| class Solution { public: Solution() { init(); } vector<string> letterCombinations(string digits) { vector<string> ans; if(digits.empty()) return ans; string tmpString; letterCombinations(ans, tmpString, digits, 0); return ans; } private: unordered_map<int, vector<char>> int2char; void init() { int2char.insert({2, vector<char>{'a','b','c'}}); int2char.insert({3, vector<char>{'d','e','f'}}); int2char.insert({4, vector<char>{'g','h','i'}}); int2char.insert({5, vector<char>{'j','k','l'}}); int2char.insert({6, vector<char>{'m','n','o'}}); int2char.insert({7, vector<char>{'p','q','r','s'}}); int2char.insert({8, vector<char>{'t','u','v'}}); int2char.insert({9, vector<char>{'w','x','y','z'}}); } void letterCombinations(vector<string>& ans,string& curr, const string& digits, int i) { if(i == digits.size()) { ans.push_back(curr); } else { int tmp = digits[i] - '0'; for(char ch : int2char[tmp]) { curr += ch; letterCombinations(ans, curr, digits, i + 1); curr.pop_back(); } } } };
|