
求解代码
java
public int solve(String nums) {
if (nums == null || nums.length() == 0 || nums.charAt(0) == '0') {
return 0;
}
int n = nums.length();
int prevPrev = 1;
int prev = 1;
for (int i = 2; i <= n; i++) {
int curr = 0;
char currChar = nums.charAt(i - 1);
char prevChar = nums.charAt(i - 2);
if (currChar != '0') {
curr += prev;
}
int twoDigit = Integer.parseInt(nums.substring(i - 2, i));
if (twoDigit >= 10 && twoDigit <= 26) {
curr += prevPrev;
}
prevPrev = prev;
prev = curr;
}
return prev;
}
小贴士
| 变量 | 对应传统DP数组 | 通俗含义 |
|---|---|---|
prevPrev |
dp[i-2] |
前i-2个字符的解码方式数 |
prev |
dp[i-1] |
前i-1个字符的解码方式数 |
curr |
dp[i] |
临时变量,存储「前i个字符」的解码方式数 |
int prevPrev = 1 对应dp[0]=1,也就是空字符串的解码方式数,没有实际解码意义,只为让组合解码的计算成立(类似于乘法中的 "1")