https://leetcode.com/problems/letter-combinations-of-a-phone-number/
问题描述
Given a string containing digits from 2-9
inclusive, 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. Note that 1 does not map to any letters.
Example:
Input: "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.
Solution
class Solution {
public:
vector<string> letterCombinations(string digits)
{
vector<string> ret;
if(digits.size() == 0)
return ret;
RecurivelyCombination("", digits, ret);
return ret;
}
private:
vector<vector<char>> mapping = {
{'a', 'b', 'c'},
{'d', 'e', 'f'},
{'g', 'h', 'i'},
{'j', 'k', 'l'},
{'m', 'n', 'o'},
{'p', 'q', 'r', 's'},
{'t', 'u', 'v'},
{'w', 'x', 'y', 'z'}};
private:
void RecurivelyCombination(string combination, string leftnums, vector<string> &ret)
{
if(leftnums.size() == 0)
ret.push_back(combination);
else
{
string digital = leftnums.substr(0, 1);
string letters = Convert2String(mapping[digital[0] - '2']);
for(int i = 0; i < letters.size(); i++)
{
string letter;
letter += letters[i];
RecurivelyCombination(combination + letter, leftnums.substr(1), ret);
}
}
}
string Convert2String(vector<char> s)
{
string ret;
for(int i = 0; i < s.size(); i++)
{
ret += s[i];
}
return ret;
}
};