一條包含字母 a-z 的訊息通過以下方式進行了編碼:
'a' -> 1
'b' -> 2
...'z' -> 26
給定乙個只包含數字的非空字串,請計算解碼方法的總數。
示例 1:
輸入: "12"輸出:
2解釋: 它可以解碼為 "ab
"(12)或者 "
l"(12)。
示例 2:
輸入: "226"
輸出:
3解釋: 它可以解碼為 "bz
" (2
26), "
vf" (22
6), 或者 "
bbf" (2
26) 。
思路:
第乙個元素如果是1,那麼就一種可能
如果加進來了乙個2,那麼兩種 1 - 2或者12
如果再加進來乙個2,那麼三種1 - 2 - 2 或者12 - 2或者乙個新的1 - 22
如果再加進來乙個2,那麼五種1 - 2 - 2 - 2或者12 - 2 - 2或者1 - 22 -2 或者兩個新的1 - 2 - 22和12 - 22
現在就可以看出來了,是乙個dp的演算法題,加進來的數可能是可以直接貼上去的,可能是要單獨的,也可能是沒有用的
這題如果沒有邊界的話,其實就是乙個很簡單的dp問題
classsolution
//如果只有最後一位=='0',則新加入的只能單獨放在最後,不能與最後一位合併(不能以0開頭)
else
if(arr[i-2]=='0')
//如果只有新加入的=='0',則新加入的不能單獨放置,必須與最後一位合併,並且如果合併結果大於26,返回0,否則
else
if(arr[i-1]=='0')
//如果 合併<=26: 則新加入可以「單獨」放在每個解碼結果之後後,並且如果以最後一位單獨結尾,此時可以合併
else
if(n>26)
//如果 合併》26: 此時最後一位又不能與新加入的合併,新加入的只能單獨放在dp[i]的每一種情況的最後
else
}return dp[dp.length-1];
}}
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 或者 b...
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...