题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
/**
* 递推公式倒是不难,主要是里面的0这个搅屎棍情况有点多,最核心的问题
* 0 不能单独出现,只能是10或者20
* 那么0的限制就有以下几个
* 1 0 不能出现在首位,露头就洗白
* 2 要是0与前一个数字合起来的数值大于20也不行
* 另外对于非0相关的话有个限制就是两个字符合起来的数值不能超过26,超过就只能单飞
*
* @param nums
* @return
*/
public int solve(String nums) {
// write code here
if (nums == null) {
return 0;
}
if (nums.indexOf('0') == 0) {
return 0;
}
int[] dp = new int[nums.length()];
for (int i = 0; i < dp.length; i++) {
if (i == 0) {
dp[i] = 1;
} else {
int num1 = Integer.parseInt(nums.substring(i - 1, i));
int num2 = Integer.parseInt(nums.substring(i, i + 1));
int tmp = Integer.parseInt(nums.substring(i - 1, i + 1));
//0的限制,,出现两个0
if (tmp == 0) {
return 0;
}
// 出现30等情况
if (num2 == 0 && tmp > 20) {
return 0;
}
// 各种单飞的情况
if (tmp > 26 || num2 == 0 || num1 == 0) {
dp[i] = dp[i - 1];
} else {
if (i == 1) {
dp[i] = 2;
} else {
dp[i] = dp[i - 1] + dp[i - 2];
}
}
}
}
return dp[nums.length() - 1];
}

