解码方法
- 题目描述
- 算法流程
- 编程代码
- 代码优化
链接: 解码方法
题目描述
算法流程
编程代码
class Solution {
public:int numDecodings(string s) {int n = s.size();vector<int> dp(n);dp[0] = s[0] != '0';if(n == 1) return dp[0];if(s[1] <= '9' && s[1] >= '1') dp[1] += dp[0];int t = (s[0] - '0') * 10 + s[1] - '0';if(t >= 10 && t <= 26) dp[1] += 1;for(int i = 2;i < n;++i){if(s[i] >= '1' && s[i] <= '9'){dp[i] += dp[i-1];}if(((s[i-1] - '0') * 10 +s[i] - '0' >= 10) && ((s[i-1] - '0') * 10 +s[i] - '0'<= 26) ){dp[i] += dp[i-2];}}return dp[n-1];}
};
代码优化
头部设置虚拟节点,根据题目设置,每个题都不一样,这里我们设置的为1
class Solution {
public:int numDecodings(string s) {int n = s.size();vector<int> dp(n+1);dp[0] = 1;dp[1] = s[0] != '0';for(int i = 2;i <= n;++i){if(s[i - 1] >= '1' && s[i - 1] <= '9'){dp[i] += dp[i-1];}if(((s[i-2] - '0') * 10 +s[i - 1] - '0' >= 10) && ((s[i-2] - '0') * 10 +s[i-1] - '0'<= 26) ){dp[i] += dp[i-2];}}return dp[n];}
};