Description

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.

A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example 1:

Input: digits = “23” Output: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

Example 2:

Input: digits = "" Output: []

Example 3:

Input: digits = “2” Output: [“a”,“b”,“c”]

Constraints:

  • 0 <= digits.length <= 4
  • digits[i] is a digit in the range ['2', '9'].

Code

class Solution {
    const vector<string> pad = {
        "", "", "abc", "def", "ghi", "jkl",
        "mno", "pqrs", "tuv", "wxyz"
    };
public:
    vector<string> letterCombinations(string digits) {
        vector<string> res;
        if(digits == "") return res;
        int n = digits.length();
        string cur = "";
        dfs(digits, 0, n, cur, res);
        return res;
    }
 
    void dfs(string& digits, int idx, int n, string& cur, vector<string>& res) {
        if(idx == n) {
            res.push_back(cur);
            return;
        }
        
        int key = digits[idx] - '0';
        for(char k: pad[key]) {
            cur += k;
            dfs(digits, idx + 1, n, cur, res);
            cur.pop_back();
        }
    }
};

Source