Thursday, January 23, 2014

Decode Ways LeetCode

很简单就两个case需要看下,一个是有0的时候,有0的时候如果前方的数,不是1或者2,直接返回0,有0就将当前的dp table 里的数字为0,因为他只有出现10 或者20.
另一种情况就是1* 或者2*。 2*只可能是到26.所以出现的这个情况的话就是会有两种组合。一所以就是加上dp[i+2]。
普通情况就是照抄前一个table的元素。

public int numDecodings(String s) {
        if (s == null || s.length() == 0) return 0;
        int len = s.length();
        int[] dp = new int[len + 1];
       
        dp[len] = 1;
       
        for (int i = len - 1; i>=0; i--){
            if (s.charAt(i) - '0' == 0) {
                dp[i] = 0;
                if (i > 0 && (s.charAt(i - 1) - '0' == 0 || s.charAt(i - 1) - '0' > 2)){
                    return 0;
                }
            } else {
                dp[i] = dp[i + 1];
                if (i + 1 <s.length() && (s.charAt(i) - '0' == 1 ||(s.charAt(i) - '0' == 2 && s.charAt(i + 1) - '0' <= 6))){
                    dp[i] += dp[i+2];
                }
            }
        }
        return dp[0];
    }

No comments:

Post a Comment