题目描述
将给定的数转换为字符串,原则如下:1对应a,2对应b,…,26对应z。
- 示例
输入
12258
输出
“abbeh”,”aveh”,”abyh”,”lbeh”,”lyh”
编写函数给出可以转换的字符串的个数。
题目思路
题目仅仅要求给出种类的数,那么我们可以具体的来分析
1. 当字符串为空串,返回0
2. 当字符串长度为1,返回1
3. 当字符串长度为2,这个时候判断这个字符串是不是大于26,如果大于26,那么只能转换成一个字符串s[0]+s[1],如果小于等于26的话,那么可以转换为s[0]+s[1]和s[01]两种字符串。
基于上面的递归思想,可以获得下面的目标函数
//计算子串的个数
int cnt(string s) {
if (s.size() == 0)
return 0;
else if (s.size() == 1)
return 1;
else if (s.size() == 2) {
if (stoi(s) <= 26)
return 2;
else
return 1;
}else {
if (stoi(s.substr(0, 2)) <= 26)
return 2 + cnt(s.substr(2));
else
return cnt(s.substr(1));
}
}
如果让我们输出具体的子串,同样也是递归的思想,设置一个指针,当指针指向了最后元素的时候输出对应的字符串,这里应该注意使用begin+2的时候需要先判断会不会数组越界,防止错误发生。
//获取具体的子串
void getSubStr(string s,string res,int begin) { if (begin == s.size()) { cout << res<< endl;
return;
}
if (begin + 2 <= s.size()) { if (stoi(s.substr(begin, 2)) <= 26) { getSubStr(s, res + getValue(s.substr(begin, 2)), begin + 2);
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
else
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
else
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
参考代码
#include <iostream>
#include <string>
#include <algorithm>
//#include <map>
//#include <stack>
using namespace std;
char getValue(string s) {
int num = stoi(s);
char res = 96 + num;
return res;
}
//计算子串的个数
int cnt(string s) {
if (s.size() == 0)
return 0;
else if (s.size() == 1)
return 1;
else if (s.size() == 2) {
if (stoi(s) <= 26)
return 2;
else
return 1;
}else {
if (stoi(s.substr(0, 2)) <= 26)
return 2 + cnt(s.substr(2));
else
return cnt(s.substr(1));
}
}
//获取具体的子串
void getSubStr(string s,string res,int begin) {
if (begin == s.size()) {
cout << res<< endl;
return;
}
if (begin + 2 <= s.size()) {
if (stoi(s.substr(begin, 2)) <= 26) {
getSubStr(s, res + getValue(s.substr(begin, 2)), begin + 2);
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
else
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
else
getSubStr(s, res + getValue(s.substr(begin, 1)), begin + 1);
}
int main() {
string s = "12258";
cout << cnt(s) << endl;
getSubStr(s, "", 0);
return 0;
}
- 输出结果为‘’
lyh
lbeh
aveh
abyh
abbeh