题解 | #把数字翻译成字符串# 后缀和思路
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
import java.util.*;
public class Solution {
public int solve (String nums) {
int n = nums.length();
if (n == 0) return 0;
if (n == 1) {
if (nums.charAt(0) == '0')
return 0;
else
return 1;
}
char[] chars = nums.toCharArray();
// 初始化dp表
int [] dp = new int[n];
if (chars[n - 1] == '0') {
dp[n - 1] = 0;
} else {
dp[n - 1] = 1;
}
if (chars[n - 2] == '0') {
dp[n - 2] = 0;
} else if (chars[n - 2] * 10 + chars[n - 1] - '1' * 11 + 11 <= 26 && chars[n - 2] * 10 + chars[n - 1] - '1' * 11 + 11 > 0) {
dp[n - 2] = dp[n - 1] + 1;
} else {
dp[n - 2] = dp[n - 1];
}
// 遍历字符串
for (int i = n - 3; i >= 0; --i) {
if (chars[i] == '0') {
// 说明有一种可能,和前一个组成一个字母
dp[i] = 0;
} else if (chars[i] * 10 + chars[i + 1] - '1' * 11 + 11 <= 26) {
// 说明有两种可能,和前一个组成一个字母或自己是一个字母
dp[i] = dp[i + 1] + dp[i + 2];
} else {
// 说明有一种可能,自己是一个字母
dp[i] = dp[i + 1];
}
}
return dp[0];
}
}
#动态规划##后缀#
