LeetCode 91.解码方法

LeetCode 91.解码方法

ways:

s[i] = 0 : 
							if(s[i-1] == 1 || s[i-1] == 2) :s[i]只能和前一位绑定在一起,此时dp[i] = dp[i-2];
							else return 0 :无意义
s[i] != 0:
							if(s[i-1] ==1 ) : s[i]能和s[i-1]组合也能拆开,dp[i] = dp[i-1]+dp[i-2];
							else if(s[i-1] == 2 && s[i]<=6) : 也能组合,也能拆开,dp[i] = dp[i-1]+dp[i-2];
							else : 不能组合,只能拆开,dp[i] = dp[i-1];

eg:

2 2 0 6 1 1
dp 1 2 1 1 1 2

完整代码:

class Solution {
public:
    int numDecodings(string s) {
        vector dp(s.size()+1 , 1);		// 多定义dp的一个范围,防止第1(2)个元素访问dp[i-2]产生越界;
        if(s[0] == '0')
            return 0;
        for(int i=1;i

你可能感兴趣的:(剑指offer学习笔记,leetcode,动态规划,算法)