int Len;
string digit_map[8]{ "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
void search(const string& digits, int pos, string path, vector<string>& v)
{
if (pos == Len) return;
string s = digit_map[digits[pos] - '2'];
for (int i = 0; s[i]; ++i)
{
if (pos == Len - 1) v.push_back(path + s[i]);
else search(digits, pos + 1, path + s[i], v);
}
}
vector<string> letterCombinations(string digits)
{
Len = digits.length();
vector<string> v;
search(digits, 0, "", v);
return v;
}
class Solution {
public List<String> letterCombinations(String digits) {
if(digits.length()==0)
return new ArrayList<String>();
String [] str={" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
List<String> ans=new ArrayList<>();
ans.add("");
for(int i=0;i<digits.length();i++)
{
String letter=str[digits.charAt(i)-'0'];
int size=ans.size();
for(int j=0;j<size;j++)
{
String t=ans.get(0);
ans.remove(0);
for(int k=0;k<letter.length();k++)
{
ans.add(t+letter.charAt(k));
}
}
}
return ans;
}
}