C++给定一个仅包含数字 2-9 的字符串s,返回所有它能表示的字母组合。可以按任意顺序返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:7 输出:p q r s
时间: 2023-07-21 18:02:23 浏览: 143
一个简单的字符串统计代码,用户输入字符串,以问号结束,统计其中的字母个数,数字个数及其他符号数 C和C++两种语言实现
5星 · 资源好评率100%
你可以使用回溯法来解决这个问题。首先,你可以创建一个映射表,将数字与字母的对应关系存储起来。接下来,你可以定义一个递归函数,它将接受当前要处理的数字索引、当前组合的字符串以及最终结果的引用。
在递归函数中,首先判断如果当前数字索引等于字符串的长度,说明已经处理完了所有数字,将当前组合加入结果中,并返回。否则,根据当前数字索引获取对应的数字,并通过映射表获取对应的字母。
然后,对于每个字母,将其加入当前组合,并递归调用下一个数字的索引。递归调用完成后,需要将最后加入的字母从当前组合中移除,以便尝试下一个字母。
最后,当递归函数返回时,你可以得到所有可能的字母组合。
以下是一个可能的实现:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
unordered_map<char, string> digitToLetters = {
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
void backtrack(int index, string& digits, string& combination, vector<string>& result) {
if (index == digits.length()) {
result.push_back(combination);
return;
}
char digit = digits[index];
string letters = digitToLetters[digit];
for (char letter : letters) {
combination.push_back(letter);
backtrack(index + 1, digits, combination, result);
combination.pop_back();
}
}
vector<string> letterCombinations(string digits) {
vector<string> result;
if (digits.empty()) {
return result;
}
string combination;
backtrack(0, digits, combination, result);
return result;
}
int main() {
string digits = "7";
vector<string> result = letterCombinations(digits);
for (string combination : result) {
cout << combination << " ";
}
cout << endl;
return 0;
}
```
以上代码会输出 "p q r s",这是数字 7 对应的字母组合。你可以根据需要修改输入的数字字符串来获取不同的字母组合。
阅读全文