/*一串字母根据A-1、B-2、...、Y-25、Z-26加密,将一串数字密文解密,按字母大小顺序输出*/
/*测试用例:输入12,输出AB、L*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//感觉用一个全局变量的哈希表可能会更简单一些二
void DFS(vector<string> &alps, string numsSub, string alpsSub) {
if (numsSub.empty()) {
alps.push_back(alpsSub);
return;
}
if (numsSub.size() == 1) {
if (numsSub[0] >= '1' && numsSub[0] <= '9') {
alpsSub += string(1, numsSub[0] - '1' + 'A');
alps.push_back(alpsSub);
}
//如果最后剩的是0,把之前得到的结果抛弃
return;
}
//把打头的一个字母单独来看
if (numsSub[0] >= '1' && numsSub[0] <= '9') {
string temp = alpsSub + string(1, numsSub[0] - '1' + 'A');
DFS(alps, numsSub.substr(1), temp);
}
//把打头的两个字母合并起来看
if (numsSub[0] == '1') {
string temp = alpsSub + string(1, numsSub[1] - '0' + 'J');;
DFS(alps, numsSub.substr(2), temp);
}
if (numsSub[0] == '2' && numsSub[1] <= '6' && numsSub[1] >= '0') {
string temp = alpsSub + string(1, numsSub[1] - '0' + 'T');
DFS(alps, numsSub.substr(2), temp);
}
}
int main() {
string nums;
cin >> nums;
vector<string> alps;
string numsSub = nums;
string alpsSub;
DFS(alps, numsSub, alpsSub);
sort(alps.begin(),alps.end());
for(auto str:alps)
cout << str << endl;
}
字符串解码问题
最新推荐文章于 2021-08-09 23:18:19 发布