leetcode 91題 解碼方法(動態規劃)

2021-09-28 01:50:06 字數 959 閱讀 6327

一條包含字母 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) 。

/*

此題和爬樓梯是同乙個型別的問題,難點在於其新增了許多限制條件,只要避開限制條件就可以完美解題了

每次遞進,可以選取乙個數也可以選取兩個數:

s[i] != '0'

如果 s[i-1]s[i] <= 26, 則 dp[i] = dp[i-1] + dp[i-2]

如果 s[i-1]s[i] > 26, 則 dp[i] = dp[i-1], 這是因為 s[i-1]s[i] 組成的兩位數無法翻譯

s[i] == '0'

如果 s[i-1]s[i] <= 26, 則 dp[i] = dp[i-2], 這是因為 s[i] 無法翻譯

還有一些情景直接使得整個序列無法被翻譯:

相鄰的兩個 『0』

以 『0』 結尾的大於 26 的數字

*/class solution else if(temp==1)else if(temp==3)else

}return dp[length];

}public int inrange(char c1,char c2)else if(c2=='0'&&c1<='2')else if(c1>'2'||c1=='0'||c2=='0'||(c1=='2'&&c2>'6'))

return 2;

}}

LeetCode91 解碼方法

這題,我花了好大的功夫才通過,中途踩了很多坑,從這個15頂25踩,通過率只有10 多,就能看出這個題,雖然是乙個中等難度的題,但是並沒有那麼好做。看到題目,感覺有點像爬樓梯的那個?想到用動態規劃。第一次寫 沒有考慮0的情況,出錯,那麼就考慮吧,如果出現在頭,就返回0,出現的中間的話。不過我是從後往前...

LeetCode 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 或者 ...

leetcode 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 或者 bbf...