【ALGO】Leetcode 91.解碼方法
題面
原題連結
一條包含字母 A-Z 的訊息通過以下方式進行了編碼:
'A' -> 1
'B' -> 2
...
'Z' -> 26
給定一個只包含數字的非空字串,請計算解碼方法的總數。
題目資料保證答案肯定是一個 32 位的整數。
解析
使用動態規劃演算法求解,定義
f
[
i
]
f[i]
f[i]表示由前
i
i
i個字元可以解碼回去的字串集合,考慮1位解碼和兩位解碼的情況,轉移方程為
f
[
i
]
=
f
[
i
]
+
f
[
i
−
1
]
f
[
i
]
=
f
[
i
]
+
f
[
i
−
2
]
if
(
s
[
i
−
1
]
−
′
0
′
)
∗
10
+
(
s
[
i
]
−
′
0
′
)
∈
[
10
,
26
]
f[i]=f[i]+f[i-1]\\ f[i]=f[i]+f[i-2] \quad \text{if} (s[i-1]-'0')*10+(s[i]-'0')\in[10, 26]
f[i]=f[i]+f[i−1]f[i]=f[i]+f[i−2]if(s[i−1]−′0′)∗10+(s[i]−′0′)∈[10,26]
AC程式碼
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
s = ' '+s;
vector<int> f(n+1);
f[0]=1;
for(int i=1; i<=n; ++i){
if(s[i]>='1' && s[i]<='9') f[i]+=f[i-1];
if(i>1){
int t=(s[i-1]-'0')*10+s[i]-'0';
if(t>=10 && t<=26) f[i]+=f[i-2];
}
}
return f[n];
}
};
相關文章
- 微軟面試題: LeetCode 91. 解碼方法 出現次數:3微軟面試題LeetCode
- 【ALGO】Leetcode 85.最大矩形GoLeetCode
- 【ALGO】Leetcode 97.交錯字串GoLeetCode字串
- LeetCode-091-解碼方法LeetCode
- LeetCode_91.解碼方法LeetCode
- 【ALGO】Leetcode 98.驗證二叉搜尋樹GoLeetCode
- LeetCode 394 字串解碼LeetCode字串
- [Leetcode]394.字串解碼LeetCode字串
- 用指令碼整理Leetcode題解指令碼LeetCode
- 解碼方法
- 【leetcode】leetcode22括號生成通過程式碼及題解LeetCode
- [leetcode 題解] 849LeetCode
- Leetcode 全套題解LeetCode
- ALGO-201 大等於n的最小完全平方數Go
- Redux原始碼createStore解讀常用方法Redux原始碼
- Python3內建模組之json編碼解碼方法講解PythonJSON
- LeetCode 解題彙總LeetCode
- js解leetcode(32)-中等JSLeetCode
- Leetcode 565 & 240 題解LeetCode
- 【LeetCode】求眾數(四種方法)LeetCode
- javaweb中中文亂碼解決方法總結之response和request解決方法JavaWeb
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- 程式碼混淆的原理和方法詳解
- Vue 原始碼解讀(6)—— 例項方法Vue原始碼
- Mysql忘記密碼解決方法凹MySql密碼
- java中亂碼問題解決方法Java
- mongodb密碼特殊字元的解決方法MongoDB密碼字元
- 程式碼隨想錄leetcodeLeetCode
- 【leetcode 399 周賽】【題解】LeetCode
- LeetCode題解第122題LeetCode
- leetcode題解【持續更新】LeetCode
- LeetCode 37. 解數獨LeetCode
- STM CubeMx不能生成程式碼的解決方法
- centos7 vim中文亂碼解決方法CentOS
- LeetCode-089-格雷編碼LeetCode
- LeetCode 89. 格雷編碼LeetCode
- [LeetCode解題] -- 零錢兌換LeetCode
- leetcode題解(動態規劃)LeetCode動態規劃