题目描述
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字,给出有多少种可能的译码结果。
输入描述:
编码后数字串
输出描述:
可能的译码结果数
示例1
输入
复制
12
输出
复制
2
说明
2种可能的译码结果(”ab” 或”l”)
示例2
输入
复制
31717126241541717
输出
复制
192
说明
192种可能的译码结果
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
string Input;
cin >> Input;
vector<int> dp(Input.length() + 1,0);
dp[0] = 1;
for(int i = 0;i < Input.length();i ++){
if(i > 0 && stoi(Input.substr(i - 1,2)) >= 10 && stoi(Input.substr(i - 1,2)) <= 26){
if(Input[i] == '0')
{
dp[i + 1] += dp[i - 1];
}
else{
dp[i + 1] += dp[i - 1] + dp[i];
}
}
else if(Input[i] == '0'){
cout << "0" << endl;
return 0;
}
else{
dp[i + 1] += dp[i];
}
}
cout << dp[Input.length()] <<endl;
return 0;
}