Skip to content

Commit 5192391

Browse files
committed
2
1 parent 341556b commit 5192391

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
1-
21
class Solution {
3-
private:
4-
static const string keypad[8];
52
public:
63
vector<string> letterCombinations(string digits) {
7-
// Start typing your C/C++ solution below
8-
// DO NOT write int main() function
4+
map<int, string> keypad;
5+
keypad[2] = string("abc");
6+
keypad[3] = string("def");
7+
keypad[4] = string("ghi");
8+
keypad[5] = string("jkl");
9+
keypad[6] = string("mno");
10+
keypad[7] = string("pqrs");
11+
keypad[8] = string("tuv");
12+
keypad[9] = string("wxyz");
913

10-
vector<string> all_letters;
14+
vector<string> result;
1115
string letter;
12-
13-
if (digits.empty()) {
14-
all_letters.push_back(letter);
15-
return all_letters;
16-
}
17-
18-
letterCombinationsHelper(digits, 0, letter, all_letters);
16+
dfs(result, letter, digits, 0, keypad);
17+
return result;
1918
}
20-
void letterCombinationsHelper(string& digits, int step, string& letter, vector<string>& all_letters) {
21-
if (step == digits.size()) {
22-
all_letters.push_back(letter);
19+
void dfs(vector<string>& result, string& letter, string& digits, int pos, map<int, string>& keypad) {
20+
if (pos == digits.size()) {
21+
result.push_back(letter);
2322
return;
2423
}
25-
int x = digits[step] - '2';
26-
for (int i = 0; i < keypad[x].size(); i++) {
27-
letter += keypad[x][i];
28-
letterCombinationsHelper(digits, step + 1, letter, all_letters);
29-
letter.erase(letter.size() - 1, 1);
24+
int x = digits[pos] - '0';
25+
string s = keypad[x];
26+
for (int i = 0; i < s.size(); i++) {
27+
letter.push_back(s[i]);
28+
dfs(result, letter, digits, pos + 1, keypad);
29+
letter.pop_back();
3030
}
3131
}
3232
};
33-
34-
const string Solution::keypad[8] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

0 commit comments

Comments
 (0)