Leetcode 刷題——String

91. Decode Ways

https://leetcode.com/problems/decode-ways/

第一次是用遞歸寫的,結果超時了,,,,用動態規劃可以節省時間

寫此題一定要細心,,,稍有不慎就wa,,,

動態規劃
num[i]num[i] 代表到第 ii 個數字可能的組合數

如果第 ii 個數字可以與第 i1i-1 個數字組合,則num[i]=num[i1]+num[i2]num[i] = num[i-1] + num[i-2]
如果第 ii 個數字不能與第 i1i-1 個數字組合,則num[i]=num[i1]num[i] = num[i-1]

其中要特別注意 00 的存在,因爲 00 只能與前面的數字 1122 進行組合。
如果與數字 1122 進行組合,則num[i]=num[i2]num[i] = num[i-2]
否則直接返回 00 種可能的組合。

class Solution {
    
    public int numDecodings(String s) {
        char[] str = s.toCharArray();
        if(str[0] == '0'){
            return 0;
        }

        int[] num = new int[str.length + 1];
        num[0] = 1;
        num[1] = 1;
        for(int i=1; i<str.length; i++){
            if(str[i] == '0' && str[i-1] != '1' && str[i-1] != '2'){
                return 0;
            }

            if((str[i-1]>'0' && str[i-1]<'2') || (str[i-1] == '2' && str[i]<'7')){
                if(str[i] == '0'){
                    num[i+1] = num[i-1];
                }else{
                    num[i+1] = num[i] + num[i-1];
                }
            }else{
                num[i+1] = num[i];
            }
        }

        return num[str.length];
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章