solution.md 3.3 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4
# 电话号码的字母组合

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

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
以下程序实现了这一功能,请你填补空白处内容:

```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 );
ToTensor's avatar
ToTensor 已提交
32
            _____________________;
每日一练社区's avatar
每日一练社区 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46
            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;
    }
};
```

每日一练社区's avatar
每日一练社区 已提交
47 48 49
## template

```cpp
每日一练社区's avatar
每日一练社区 已提交
50
class Solution {
每日一练社区's avatar
每日一练社区 已提交
51
public:
每日一练社区's avatar
每日一练社区 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
    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;
    }
每日一练社区's avatar
每日一练社区 已提交
86 87 88 89 90 91
};
```

## 答案

```cpp
每日一练社区's avatar
每日一练社区 已提交
92
dfs( ans, k + 1 );
每日一练社区's avatar
每日一练社区 已提交
93 94 95 96 97 98 99
```

## 选项

### A

```cpp
每日一练社区's avatar
每日一练社区 已提交
100
dfs( ans, k );
每日一练社区's avatar
每日一练社区 已提交
101 102 103 104 105
```

### B

```cpp
每日一练社区's avatar
每日一练社区 已提交
106
dfs( ans, k - 1 );
每日一练社区's avatar
每日一练社区 已提交
107 108 109 110 111
```

### C

```cpp
每日一练社区's avatar
每日一练社区 已提交
112
dfs( ans, k + 2 );
每日一练社区's avatar
每日一练社区 已提交
113
```