题目描述
2-9中的数字组成的字符串,按照电话按键的模式,给出所有能映射到的字符串。
解决方案
初步的想法是递归,类似于树的结构。
字符转字符串:
最开始关于paths的想法有点错误,递归函数,每次传入的路径应该只有一条,而不是一个数组。要把问题细化。
关于字符串tmp的设置就不要用switch-case了,用map吧。
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| string c2 = "abc"; string c3 = "def"; string c4 = "ghi"; string c5 = "jkl"; string c6 = "mno"; string c7 = "pqrs"; string c8 = "tuv"; string c9 = "wxyz";
void findPath(string digits, int begin, string path, vector<string>& res) { string tmp = ""; switch (digits[begin]) { case '2': { tmp = c2; break; } case '3': { tmp = c3; break; } case '4': { tmp = c4; break; } case '5': { tmp = c5; break; } case '6': { tmp = c6; break; } case '7': { tmp = c7; break; } case '8': { tmp = c8; break; } case '9': { tmp = c9; break; } } int len = digits.length(); if (begin == len - 1) { for (int i = 0; i < tmp.length(); ++i) { res.push_back(path + tmp[i]); } return; } for (int i = 0; i < tmp.length(); ++i) { findPath(digits, begin + 1, path + tmp[i], res); } } vector<string> letterCombinations(string digits) { vector<string> res; int len = digits.length(); if (len > 0) findPath(digits, 0, "", res); return res; }
|