一、題目描述
二、解題方法
很明顯地,需要使用動態規劃來解決,我們需要注意以下幾個邊界條件:
- 設爲~的譯碼方法總數
- 建立最優子結構
- :那麼要求 ,否則無法譯碼,直接
- :不管是多少,都一定可以組成一個碼,
- :同理,
- 優化:由上面的分析可知,的值只與 和有關,可以將空間複雜度從優化到
三、解題代碼
class Solution {
public:
int numDecodings(string s) {
auto len = s.size();
if(!len) return 0;
if(s[0] == '0') return 0;
int dp_1 = 1, dp = 1;
for(int i = 1; i < len; i++){
auto tmp = dp;
if(s[i] == '0')
if(s[i - 1] == '1' || s[i - 1] == '2') dp = dp_1;
else return 0;
else if(s[i - 1] == '1' ||(s[i - 1] == '2' && s[i] <= '6' && s[i] >= '1')) dp += dp_1;
dp_1 = tmp;
}
return dp;
}
};
四、運行結果
暴力法一定會超時的