17 - Letter Combinations Of A Phone Number

#medium

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"]

class Solution {
public:
    vector<string> letters;
    vector<string> result;
    void backtracking( string digits, int startIndex, string one_result ) {
        if ( digits.size() == startIndex ) {
            result.push_back( one_result );
            return;
        }

        int digit = digits[startIndex] - '0';
        string letter = letters[digit-2];
        for ( int i = 0; i < letter.size(); i++ ) {
            one_result += letter[i];
            backtracking( digits, startIndex + 1, one_result);
            one_result.resize(one_result.size()-1);
        }


    }

    vector<string> letterCombinations(string digits) {
        letters.push_back( "abc" );
        letters.push_back( "def" );
        letters.push_back( "ghi" );
        letters.push_back( "jkl" );
        letters.push_back( "mno" );
        letters.push_back( "pqrs" );
        letters.push_back( "tuv" );
        letters.push_back( "wxyz" );
        int startIndex = 0;
        if ( digits.size() == 0 ) return result;
        backtracking( digits, startIndex, "" );
        return result;
    }
};