leetcode——91.解码方法

class Solution:
    def numDecodings(self, s: str) -> int:
        a={}
        if int(s[0])==0:
            return 0
        else:
            a[0]=1
        if len(s)==1:
            return a[0]
        if int(s[0])>2 and int(s[1])==0:
            a[1]=0
            if len(s)>1:
                return 0
        if (int(s[0]+s[1])>26) or (int(s[0])<3 and int(s[1])==0):
            a[1]=1
        elif int(s[0]+s[1])<=26:
            a[1]=2
        #print(a)
        if len(s)==2:
            return a[1]
        for i in range(2,len(s)):
            if s[i-1]=='0' and s[i]=='0':
                return 0
            elif int(s[i-1])>2 and s[i]=='0':
                return 0
            elif (int(s[i-1]+s[i]))>26 or (s[i-1]=='0' and int(s[i])!=0):
                a[i]=a[i-1]
            elif int(s[i-1])<3 and s[i]=='0':
                a[i]=a[i-2]
            elif int(s[i-1]+s[i])<=26:
                a[i]=a[i-1]+a[i-2]
            else:
                a[i]=a[i-1]
        return a[len(s)-1]
执行用时 :44 ms, 在所有 python3 提交中击败了88.37%的用户
内存消耗 :14 MB, 在所有 python3 提交中击败了5.21%的用户
 
思路分析:
当字符串的首位为0的时候,直接输出0;
先分析给定前两位的种类个数,统一分析长度大于2的情况;
如果中间位出现30,40,50等等的这种情况以及00的这种情况,直接输出0;
如果像31,58这种大于26的数,输出结果与前一位的结果相同,即a[i]=a[i-1];
如果是10,20这样的情况,a[i]=a[i-2]
如果是23,18等这种小于27的情况,a[i]=a[i-1]+a[i-2]
结束。
 
 
                                                              ——2019.10.15
 
用java又做了一遍。
public int numDecodings(String s) {
        if(s.charAt(0) == '0'){
            return 0;
        }
        int n = s.length();
        if(n==0){
            return 0;
        }
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 1;i<n;i++){
            if(s.charAt(i)=='0' && s.charAt(i-1) == '0'){
                return 0;
            }
            //dp[i] = dp[i-1] + dp[i-2]  如果
            int k = Integer.parseInt(s.substring(i - 1,i+1));
            if(k ==10 || k == 20){
                dp[i+1] = dp[i-1];
            }else  if( k >10 && k <=26){
                dp[i+1] = dp[i] + dp[i-1];
            }else if(k%10 == 0){
                return 0;
            } else{
                dp[i+1] = dp[i];
            }
        }
        return dp[n];
    }

 

 

——2020.6.27

posted @ 2019-10-15 11:46  欣姐姐  阅读(155)  评论(0编辑  收藏  举报