91. Decode Ways--leetcode

来源:互联网 发布:七彩网络 编辑:程序博客网 时间:2024/05/16 15:44

题目

‘A’ -> 1
‘B’ -> 2
‘Z’ -> 26
Given encoded message “12”, it could be decoded as “AB” (1 2) >or “L” (12).
The number of ways decoding “12” is 2.

思路:动态规划
dp[i]表示前i个数字的解码方式个数

第一次的思路

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

上述代码有错误,计算的方式不对

正确的代码:

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

思路:待补……

原创粉丝点击