题解 | 把数字翻译成字符串
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
public int solve (String nums) {
// write code here
if (nums == null || nums.length() == 0 || nums.charAt(0) == '0') {
return 0;
}
int n = nums.length();
int[] dp = new int[n + 1];
// 边界条件初始化
dp[0] = 1; // 为后续的“两步跳”做铺垫
dp[1] = 1; // 因为首位不是 '0'(前面已拦截),所以前1个字符必定有1种解法
// 从第 2 个字符开始遍历
for (int i = 2; i <= n; i++) {
// 尝试走一步:取出当前单字符
int singleDigit = nums.charAt(i - 1) - '0';
if (singleDigit >= 1 && singleDigit <= 9) {
dp[i] += dp[i - 1]; // 继承单步的方案数
}
// 尝试走两步:取出当前字符和前一个字符组成的两位数
int doubleDigit = (nums.charAt(i - 2) - '0') * 10 + singleDigit;
if (doubleDigit >= 10 && doubleDigit <= 26) {
dp[i] += dp[i - 2]; // 叠加两步跳的方案数
}
}
// 走到最后,返回前 n 个字符的方案数
return dp[n];
}
}
查看12道真题和解析