题目:
输入数字字符串, 输出这串字符对应的九键输入法有可能出现的所有情况
算法:
- 定义了一个全局变量
g_numStr
,其中存储了每个数字对应的字母。 - 定义了一个递归函数
str_combine
,用于将每个数字对应的字母进行组合。 str_combine
函数接受四个参数:digits
表示输入的数字字符串,i
表示当前处理的数字在digits
中的下标,vCombine
表示存储所有字母组合结果的 vector,tmp
表示当前已经组合好的字母。- 当
i
的值等于digits
的长度时,说明所有数字已经被处理完,将当前的组合结果tmp
存入vCombine
中,并返回。 - 在
for
循环中,枚举当前数字对应的所有字母,对每个字母进行递归处理。在递归调用中,将当前字母加入到tmp
中,将i
加一,继续处理下一个数字。 - 在
main
函数中,先读入输入的数字字符串,然后调用letter_comvibinations
函数获取所有字母组合结果,并将结果输出到屏幕上。
源码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;vector<string> g_numStr = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };void str_combine(string digits, int i, vector<string>& vCombine, string tmp)
{if (i == digits.size()){vCombine.push_back(tmp);return;}for (auto ch : g_numStr[digits[i] - '0']){str_combine(digits, i + 1, vCombine, tmp + ch);}
}vector<string> letter_comvibinations(string digits)
{vector<string> vCombine;str_combine(digits, 0, vCombine, "");return vCombine;
}int main()
{string digits;cin >> digits;vector<string> vCombine = letter_comvibinations(digits);for (auto& e : vCombine){cout << e << " ";}cout << endl;return 0;
}