vector<string> letterCombinations(string digits) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     result.clear();
     letterCombinationsHelper(digits,0,"");
     return result;
 }
 vector<string> letterCombinations(string digits) {
     string pad[8] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};;
     vector<string> res;
     string sol = "";
     letterCombinationsHelper(pad, digits, 0, sol, res);
     return res;
 }
 void letterCombinationsHelper(string pad[], string& digits, int pos, string &sol, vector<string> &res) {
     if (pos == digits.size()){
         res.push_back(sol);
         return;
     }
     int idx = digits[pos] - '2';
     for (int i = 0; i < pad[idx].size(); i++){
         sol.push_back(pad[idx][i]);
         letterCombinationsHelper(pad, digits, pos + 1, sol, res);
         sol.pop_back();
     }
 }
 void letterCombinationsHelper(string& digits, int i, string str)
 {
     if(i==digits.size())
     {
         result.push_back(str);
         return;
     }
     
     int pos=digits[i]-'2';
     for(int j=0; j< keypad[pos].size(); j++)
     {
        letterCombinationsHelper(digits,i+1,str+keypad[pos][j]);
     }
 }  
 vector<string> letterCombinations(string digits) {
     if(digits.empty())
         return {};
         
     std::vector<std::string> mapping{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
     std::vector<std::string> result;
     
     std::function<void(std::vector<std::string>&, std::string, int, std::string, vector<string>&)>
     letterCombinationsHelper = [&](std::vector<string>& mapping, std::string digits, int index, std::string resStr, std::vector<string>& result)
     {
         if(index == digits.size())
         result.push_back(resStr);
         else
         {
             string curStr = mapping[digits[index] - '2'];
             for(int i = 0, sz = curStr.size(); i < sz; ++i)
                 letterCombinationsHelper(mapping,digits,index + 1, resStr + curStr[i], result);
         }
     };
     
     letterCombinationsHelper(mapping, digits, 0, "", result);
     
     return result;
 }