17. Letter Combinations of a Phone Number - cocoder39/coco39_LC GitHub Wiki
17. Letter Combinations of a Phone Number
O(4 ^ n)
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) {
return {};
}
vector<string> encode = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> res;
string cur;
helper(res, cur, encode, digits, 0);
return res;
}
private:
void helper(vector<string>& res, string& cur, vector<string>& encode, string& digits, int start) {
if (start == digits.length()) {
res.push_back(cur);
return;
}
int num = digits[start] - '0';
for (auto c : encode[num]) {
cur.push_back(c);
helper(res, cur, encode, digits, start + 1);
cur.pop_back();
}
}
};
an iterative solution, works like bfs with Queue
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {};
queue<string> qu;
qu.push("");
for (int i = 0; i < digits.length(); i++) {
string& encode = encodes[digits[i] - '0'];
if (encode.empty()) return {};
int sz = qu.size();
for (int i = 0; i < sz; i++) {
string& str = qu.front();
qu.pop();
for (auto c : encode) {
str.push_back(c);
qu.push(str);
str.pop_back();
}
}
}
vector<string> res;
while (! qu.empty()) {
res.push_back(qu.front());
qu.pop();
}
return res;
}
private:
vector<string> encodes{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
};