一條包含字母a-z
的訊息通過以下方式進行了編碼:
'a' -> 1
'b' -> 2
...'z' -> 26
給定乙個只包含數字的非空字串,請計算解碼方法的總數。
示例 1:
輸入: "12"
輸出: 2
解釋: 它可以解碼為 "ab"(1 2)或者 "l"(12)。
示例 2:
輸入: "226"
輸出: 3
解釋: 它可以解碼為 "bz" (2 26), "vf" (22 6), 或者 "bbf" (2 2 6) 。
思路:
動態規劃來做,dp[i]表示前i個數字的編碼方法個數,狀態轉移方程如下:
(1)當前位如果不能和前面數字進行組合(當前位是第一位,或者當前位和前一位組合大於26,或者前一位是0):
(2)當前位如果能和前面數字進行組合:
class solution
else
}return dp.back();
}};
91 解碼方法
方法一 動態規劃法 該問題可以通過動態規劃的方法進行求解,我們假設s i 代表一條長度為i的訊息,對應的解碼方法的總數為dp i 那麼這個值的大小和dp i 1 以及dp i 2 相關,因為解碼時只有一位或者兩位字元可以作為乙個原碼看待。當我們假設這條訊息的最後一位作為原碼時,它的取值範圍為 1 9...
91 解碼方法
一條包含字母a z的訊息通過以下方式進行了編碼 a 1 b 2 z 26 給定乙個只包含數字的非空字串,請計算解碼方法的總數。示例 1 輸入 12 輸出 2解釋 它可以解碼為 ab 1 2 或者 l 12 示例 2 輸入 226 輸出 3解釋 它可以解碼為 bz 2 26 vf 22 6 或者 bb...
91 解碼方法
對於乙個字串我們有兩種選擇,選乙個 選兩個 注意 0 00 0x 這些坑 暴力遞迴 0開頭的無法翻譯 00,01 if s.charat start 0 選乙個 int res dfs s,start 1 選兩個 保證能選,start不能到最後乙個字元那裡去了 if start n 1 intege...