Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
int size[] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
char start[] = {'0', '0', 'a', 'd', 'g', 'j', 'm', 'p', 't', 'w'};
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> ret;
vector<char> result(digits.size());
dfs(ret, result, 0, digits);
return ret;
}
void dfs(vector<string>& ret, vector<char>& result, int cur, string& digits){
if(digits.size() == cur){
stringstream oss;
for(int i = 0; i < result.size(); ++i)
oss << result[i];
ret.push_back(oss.str());
}
else{
int idx = digits[cur] - '0';
for(int i = 0; i < size[idx]; ++i){
result[cur] = start[idx] + i;
dfs(ret, result, cur+1, digits);
}
}
}
};