class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param digits string字符串
     * @return string字符串vector
     */
    map<char, string> mp{{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};
    vector<string> ans;
    void recursive(int start1, int start2, int length, string path, string digits) {
        if (length == path.size()) {
            ans.push_back(path);
            return;
        }
        for (int i = 0; i < mp[digits[start1+1]].size(); i++) {
            recursive(start1+1, i, length, path+mp[digits[start1+1]][i], digits);
        }
    }
    vector<string> letterCombinations(string digits) {
        // write code here
        if (digits == "") return ans;
        int length = digits.size();
        for (int i = 0; i < mp[digits[0]].size(); i++) {
            string path = string(1, mp[digits[0]][i]);
            recursive(0, 0, length, path, digits);
        }
        return ans;
    }
};