相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public int numDecodings(String s) {
int len = s.length();
s = " "+s;//s前面加空格,
int[] dp = new int[len + 1];
char[] chars = s.toCharArray();
//其他细节:由于题目存在前导零,而前导零属于无效 item。可以进行特判
// 可以往字符串头部追加空格作为哨兵,追加空格既可以避免讨论前导零,也能使下标从 1 开始,简化 dp[i-1] 等负数下标的判断。
dp[0] = 1;
for (int i = 1; i <dp.length ; i++) {
// a : 代表「当前位置」单独形成 item
// b : 代表「当前位置」与「前一位置」共同形成 item
int a = chars[i]-'0';//a情况
int b = (chars[i-1]-'0')*10+(chars[i]-'0');//b情况
if (a>=1 && a<=9){//当1<= a情况 <=9时
dp[i] = dp[i-1];// 如果 a 属于有效值,那么 dp[i] 可以由 dp[i - 1] 转移过来
}
if (b>=10 && b<=26){
dp[i]+=dp[i-2];// 如果 b 属于有效值,那么 dp[i] 可以由 dp[i - 2] 或者 dp[i - 1] + dp[i - 2] 转移过来
}
}
return dp[len];
}
}