有乙個訊息包含a-z通過以下規則編碼
'a' -> 1
'b' -> 2
...'z' -> 26
現在給你乙個加密過後的訊息,問有幾種解碼的方式
樣例 1:
輸入: "12"
輸出: 2
解釋: 它可以被解碼為 ab (1 2) 或 l (12).
樣例 2:
輸入: "10"
輸出: 1
演算法:動態規劃(dp)
演算法思路
**思路
複雜度分析
n表示字串長度
public
class
solution
//陣列初值均為0,dp[0] = dp[1] = 1
//dp[i]表示字串的前i位解碼有多少種解碼方式
intn=s
.length
();int
dp=newint[n
+1];dp[0
]=dp[
1]=1
;for
(inti=
2;i<=n;
i++)
//若s[i - 2]和s[i - 1]表示的數是10到26if(
s.charat(i
-2)!=
'0'&&(s
.charat(i
-2)-
'0')*10
+s.charat(i
-1)-
'0'<=26)
//若上述兩種情況都不滿足,直接返回答案0if(
dp[i]
==0)}
returndp[
n];}}
更多題解參考:九章演算法
九章演算法 Google面試題 內積
描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...
九章演算法 Google面試題 字串解碼
給出乙個表示式 s 此表示式包括數字,字母以及方括號。在方括號前的數字表示方括號內容的重複次數 括號內的內容可以是字串或另乙個表示式 請將這個表示式展開成乙個字串。樣例1 輸入 s abc3 a 輸出 abcaaa 樣例2 輸入 s 3 2 ad 3 pf xyz 輸出 adadpfpfpfadad...
九章演算法 Google面試題 島嶼的個數II
給定 n,m,分別代表乙個二維矩陣的行數和列數,並給定乙個大小為 k 的二元陣列a.初始二維矩陣全0.二元陣列a內的k個元素代表k次操作,設第i個元素為 a i x,a i y 表示把二維矩陣中下標為a i x行a i y列的元素由海洋變為島嶼.問在每次操作之後,二維矩陣中島嶼的數量.你需要返回乙個...