1. 题目
2. 题解
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int[] dp = new int[s.length() + 1]; //s.substring(i - 2, i);需截取到最后一个字符,规避dp[i]越界问题 +1
dp[0] = 1;
dp[1] = 1;
int i = 0;
for(i = 2; i <= s.length(); i++) {
String tmp = s.substring(i - 2, i);
dp[i] = (tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0) ? dp[i - 2] + dp[i - 1] : dp[i - 1];
}
return dp[i - 1]; //使用 return dp[s.length()];也一样的效果
}
}
其实也可以这样判断是否可以截取两个 (s.charAt(i - 2) == ‘1’ || s.charAt(i - 2) == ‘2’ && s.charAt(i - 1)
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int[] dp = new int[s.length() + 1]; //s.substring(i - 2, i);需截取到最后一个字符,规避dp[i]越界问题 +1
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= s.length(); i++) {
String tmp = s.substring(i - 2, i);
dp[i] = (s.charAt(i - 2) == '1' || s.charAt(i - 2) == '2' && s.charAt(i - 1) <= '5')
? dp[i - 2] + dp[i - 1]
: dp[i - 1];
}
return dp[s.length()];
}
}