#include<iostream>
#include<vector>
#include<string>
#include<stdlib.h>
#include <sstream>
using namespace::std;
class Solution {
public:
vector<string> letterCombinations(string digits)
{
vector<string> result;
if(digits.size() == 0)
{
result.push_back("");
return result;
}
result = getResultString(result, digits);
return result;
}
vector<string> getResultString(vector<string> tempResult, string digits)
{
vector<string> results;
if(digits.length() != 0)
{
int maxIndex = 0;
int digit = digits[0] - 48;
if(digit != 7 && digit != 9)
{
maxIndex = 3;
}
else
maxIndex = 4;
for(int i = 0; i < maxIndex; i++)
{
if(tempResult.size() < maxIndex)
{
results.push_back(getCharFromDigit(digit - 2, i));
continue;
}
else
{
for(int j = 0; j < tempResult.size(); j++)
{
results.push_back(tempResult[j] + getCharFromDigit(digit - 2, i));
}
}
}
return getResultString(results,digits.substr(1));
}
else
{
return tempResult;
}
}
string getCharFromDigit(int digit, int index)
{
stringstream ss;
char map[8][4] = {{'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'}};
string result;
ss << map[digit][index];
ss >> result;
return result;
}
};
int main()
{
Solution ss;
ss.letterCombinations("2");
}
Letter Combinations of a Phone Number Jan 27 '12 945 / 2644
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.
Round 2:
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
if(digits.size() == 0)
return result;
string cur = "";
dfs(digits, 0, cur, result);
return result;
}
private:
void dfs(string digits, int index, string &cur, vector<string> &result)
{
if(index == digits.size())
{
result.push_back(cur);
return;
}
if(digits[index] == '0' || digits[index] == '1')
dfs(digits, index+1, cur, result);
else if(digits[index] == '7' || digits[index] == '9')
{
for(int i = 0; i < 4; i++)
{
cur += helper(digits[index], i);
dfs(digits, index+1, cur, result);
cur = cur.substr(0, cur.size()-1);
}
}
else
{
for(int i = 0; i < 3; i++)
{
cur += helper(digits[index], i);
dfs(digits, index+1, cur, result);
cur = cur.substr(0, cur.size()-1);
}
}
}
char helper(char num, int index)
{
char map[][4] = {{'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'}};
return map[num-'0'-2][index];
}
};