原题链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/
相似题目:解码方法
动态规划:
dp[i]表示以位置i为结尾的字符串情况有多少种
状态转移
dp[i] = dp[i - 1] + dp[i - 2] //当s[i - 1]s[i]构成字符串
dp[i] = dp[i - 1] //当s[i - 1]s[i]不构成字符串
代码:
int translateNum(int num) {
map<int, char> mp;
for (int i = 0; i < 26; i++) {
mp[i] = 'a' + i;
}
string s = to_string(num);
int n = s.size();
vector<int> dp(n + 1, 0);
dp[0] = 1;
dp[1] = 1;
for (int i = 1; i < n; i++) {
string str = s.substr(i - 1, 2);
dp[i + 1] += dp[i];
if (str[0] != '0' && mp.count(stoi(str))) dp[i + 1] += dp[i - 1]; //当str[0]不等于0时,否则str为小于10整数
}
return dp[n];
}