Leetcode_6_Dynamic Programming_91解码方法

自己写滴~注意考虑包含0的特殊情况

class Solution {
    public int numDecodings(String s) {
        int l=s.length();
        
        int[] array=new int[l];
        char[] s_array=s.toCharArray();
        for(int i=0;i<l;i++){
            array[i]=(int)(s_array[i]-'0');
       }
        if(array[0]==0) return 0;
        if(l==1) return array[0]==0?0:1;
        int[] dp=new int[l];
        dp[0]=array[0]==0?0:1;
        if(s.contains("00")) return 0;

        int temp=array[0]*10+array[1];
        if(array[1]==0&&temp>26) return 0;
        else if(array[1]==0&&array[0]!=0) dp[1]=1;
        else if(temp>26) dp[1]=1;
        else dp[1]=2;
        
        if(l==2) return dp[1];
                            
        for(int i=2;i<l;i++){
            if(array[i-1]==0) dp[i]=dp[i-1];
            if(array[i]==0&&array[i-1]>=3) return 0;
            else if (array[i]==0) dp[i]=dp[i-2];
            else
            dp[i]=(array[i-1]==1&&array[1]!=0)||(array[i-1]==2&&array[i]<=6)?dp[i-2]+dp[i-1]:dp[i-1];
        }
        return dp[l-1];
    }
}

 

上一篇:山东潍坊某数据恢复公司客户服务器感染 .Globeimposter-Alpha865qqz后缀勒索病毒


下一篇:解码问题--leetcode:91 (2019商汤笔试)