/**
* suppose the message is m1m2...mn, then mn can be determined by m(n-1) by,
* if m(n-1)mn > 26, f(n) = f(n-1)
* else m(n-1)mn <= 26, there are two possible ways to decode, the first one is last two digits are separate and
* the second one is last two digits are together, therefore, f(n) = f(n-1) + f(n-2)
*/
public class Solution {
public int numDecodings(String s) {
int len = s.length();
if (len == 0) return 0;
if (s.charAt(0) == '0') return 0;
int[] dp = new int[len+1];
dp[0] = dp[1] = 1;
for (int i=2; i<=len; i++) {
int lastTwoDigits = Integer.parseInt(s.substring(i-2, i));
System.out.println(lastTwoDigits);
if (lastTwoDigits > 26)
if (s.charAt(i-1) == '0') dp[i] = 0;
else dp[i] = dp[i-1];
else if (lastTwoDigits <= 0)
return 0;
else
if (s.charAt(i-1) == '0') dp[i] = dp[i-2];
else if (s.charAt(i-2) == '0') dp[i] = dp[i-1];
else dp[i] = dp[i-1] + dp[i-2];
}
return dp[len];
}
}
Leetcode 91. Decode Ways
最新推荐文章于 2020-10-20 11:27:19 发布