91. Decode Ways
by Botao Xiao
Thinking:
- Method:
- 通过动态规划实现。
- 分析:
- 通过一个长度为len + 1的数组装载每个位的结果。
- dp[0]的值为1。
- 每个当前值都是由dp[i - 1]和dp[i - 2]决定的。
- 当前值在1-9之间,我们当前值加上dp[i - 1]。
- 当这两位的值在10 - 26之间,就要加上dp[i - 2]。
class Solution {
public int numDecodings(String s) {
if(s == null) return 1;
int len = s.length();
int[] dp = new int[len + 1];
dp[0] = 1;
for(int i = 0; i < len; i++){
char c = s.charAt(i);
if(c > '0' && c <= '9') dp[i + 1] += dp[i];
if(i > 0 && c >= '0' && c <= '6' && s.charAt(i - 1) == '2') dp[i + 1] += dp[i - 1];
if(i > 0 && s.charAt(i - 1) == '1') dp[i + 1] += dp[i - 1];
}
return dp[len];
}
}
二刷
这道题还是比较简单的DP,稍微想了一下就写出来了。
class Solution {
public int numDecodings(String s) {
if(s == null) return 0;
int len = s.length();
int[] dp = new int[len + 1];
dp[0] = 1;
char[] arr = s.toCharArray();
for(int i = 1; i <= len; i++){
int c = arr[i - 1] - '0';
if(c > 0 && c <= 9) dp[i] += dp[i - 1];
if(i > 1 && c >= 0 && c <= 6 && arr[i - 2] == '2') dp[i] += dp[i - 2];
if(i > 1 && arr[i - 2] == '1') dp[i] += dp[i - 2];
}
return dp[len];
}
}
Subscribe via RSS