题目
思路:
Python
class Solution:
def crackNumber(self, ciphertext: int) -> int:
s = str(ciphertext)
n = len(s)
dp = [0] * (n+1) # dp[i]前i位数字有几种解密结果
dp[0], dp[1] = 1, 1
for i in range(2, n+1):
if int(s[i-2: i]) >= 10 and int(s[i-2: i]) <= 25:
dp[i] = dp[i-2] + dp[i-1]
else:
dp[i] = dp[i-1]
return dp[n]
Java
class Solution {
public int crackNumber(int ciphertext) {
String numStr = String.valueOf(ciphertext);
int n = numStr.length();
int dp[] = new int[n + 1]; // dp[n]表示前n个数字的解密方法数量
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
int num1 = numStr.charAt(i - 2) - '0';
int num2 = numStr.charAt(i - 1) - '0';
int tmpVal = 10 * num1 + num2;
if (tmpVal >= 10 && tmpVal <= 25) {
dp[i] = dp[i - 1] + dp[i -2];
} else {
dp[i] = dp[i - 1];
}
}
return dp[n];
}
}