# 电话号码的字母组合

<p>给定一个仅包含数字 <code>2-9</code> 的字符串，返回所有它能表示的字母组合。答案可以按 <strong>任意顺序</strong> 返回。</p><p>给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。</p><p><img src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0017.Letter%20Combinations%20of%20a%20Phone%20Number/images/17_telephone_keypad.png" style="width: 200px;" /></p><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>digits = "23"<strong><br />输出：</strong>["ad","ae","af","bd","be","bf","cd","ce","cf"]</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>digits = ""<strong><br />输出：</strong>[]</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>digits = "2"<strong><br />输出：</strong>["a","b","c"]</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>0 <= digits.length <= 4</code></li>	<li><code>digits[i]</code> 是范围 <code>['2', '9']</code> 的一个数字。</li></ul>

以下程序实现了这一功能，请你填补空白处内容：

```cpp
class Solution {
public:
    vector<string> str;
    vector<string> ret;
    string getStr( int x ) {
        switch( x ) {
            case 2: return "abc";
            case 3: return "def";
            case 4: return "ghi";
            case 5: return "jkl";
            case 6: return "mno";
            case 7: return "pqrs";
            case 8: return "tuv";
            case 9: return "wxyz";
            default: return "";
        }
    }
    void dfs( string& ans, int k ) {
        if ( k >= str.size() ) {
            ret.push_back( ans );
            return;
        }
        for ( auto& it : str[k] ) {
            ans.push_back( it );
            _____________________;
            ans.pop_back();
        }
    }
    vector<string> letterCombinations(string digits) {
        if ( !digits.size() ) return {};
        for ( auto& it : digits ) 
            str.push_back( getStr( it & 15 ) );
        string ans = "";
        dfs( ans, 0 );
        return ret;
    }
};
```

## template

```cpp
class Solution {
public:
    vector<string> str;
    vector<string> ret;
    string getStr( int x ) {
        switch( x ) {
            case 2: return "abc";
            case 3: return "def";
            case 4: return "ghi";
            case 5: return "jkl";
            case 6: return "mno";
            case 7: return "pqrs";
            case 8: return "tuv";
            case 9: return "wxyz";
            default: return "";
        }
    }
    void dfs( string& ans, int k ) {
        if ( k >= str.size() ) {
            ret.push_back( ans );
            return;
        }
        for ( auto& it : str[k] ) {
            ans.push_back( it );
            dfs( ans, k + 1 );
            ans.pop_back();
        }
    }
    vector<string> letterCombinations(string digits) {
        if ( !digits.size() ) return {};
        for ( auto& it : digits ) 
            str.push_back( getStr( it & 15 ) );
        string ans = "";
        dfs( ans, 0 );
        return ret;
    }
};
```

## 答案

```cpp
dfs( ans, k + 1 );
```

## 选项

### A

```cpp
dfs( ans, k );
```

### B

```cpp
dfs( ans, k - 1 );
```

### C

```cpp
dfs( ans, k + 2 );
```