Decode Ways --lintcode

Description

A message containing letters from A-Z is being encoded to numbers using the following mapping:

‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.

Example

Given encoded message 12, it could be decoded as AB (1 2) or L (12).
The number of ways decoding 12 is 2.

我的思路:這個有點像爬樓梯。要麼’走一步’ 要麼’走兩步’. 即temp[i]=temp[i-1]+temp[i-2];
但是這個比爬樓梯多了一些限制條件。
1.s[i-1]不能爲0,如果s[i-1]是0的話,number[i]就只能等於number[i-2]
2.s[i-2,i-1]中的第一個字符不能是0,而且Integer.parseInt(s.substring(i-2,i))形成的數字不能大於26.

public int numDecodings(String s) {
    if(s==null || s.length()==0) {  
            return 0;  
        }  
        if(s.charAt(0)=='0') {  
            return 0;  
        }  

        int [] temp = new int[s.length() + 1];  
        temp[0] = 1;  
        temp[1] = 1; 
        int tmp;
        for(int i=2;i<=s.length();i++){
        //檢查當前字符是不是'0' 
            if(Integer.parseInt(s.substring(i-1,i))!=0)
                temp[i]=temp[i-1];
            //檢查當前字符和前一個字符組合在一起是否在1-26之間  
            if(s.charAt(i-2)!='0'){
                tmp = Integer.parseInt(s.substring(i-2,i));  
                if(tmp>0&&tmp<=26) {  
                    temp[i] += temp[i-2];  
                }  
            }
        }
         return temp[s.length()];
}
發佈了53 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章