# 电话号码的字母组合
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i]
是范围 ['2', '9']
的一个数字。
以下程序实现了这一功能,请你填补空白处内容:
```cpp
class Solution {
public:
vector str;
vector 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 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 str;
vector 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 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 );
```