1. 题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/452299f46f540033500991f4829c40ba.png#pic_center)
2. 思路
(1) 动态规划
- dp[i]表示下标为[0,i)的子字符串的译码数,分别处理四种状态转移的情况即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int solve(String nums) {
char[] chars = nums.toCharArray();
int n = chars.length;
if (n == 0) {
return 0;
}
int[] dp = new int[n + 1];
dp[0] = 1;
int pre = chars[0] - '0';
dp[1] = pre == 0 ? 0 : 1;
for (int i = 2; i <= n; i++) {
int cur = chars[i - 1] - '0';
if (cur == 0) {
if (pre == 1 || pre == 2) {
dp[i] = dp[i - 2];
} else {
return 0;
}
} else {
if (pre == 1 || pre == 2 && cur <= 6) {
dp[i] = dp[i - 2] + dp[i - 1];
} else {
dp[i] = dp[i - 1];
}
}
pre = cur;
}
return dp[n];
}
}