【Leetcode】91. Decode Ways

【Leetcode】91. Decode Ways_第1张图片

1 使用动态规划来解

2 这里额外的空间就是dp[i-1]和dp[i-2],时间复杂度是O(n)

3 有时候只需要知道有多少种方法,但不需要具体列出方法的题,可以使用动态规划

4 假设当前字符是z,z的前两个是xy,也就是xyz,会产生如下情况:

    a,当z=0,而且y=1或者2的时候,因为10或者20只有一种解释,所以dp[i]=dp[i-2]; 

    b,如果z=0,y不等于1也不等于2的时候,dp[i]=0,比如130,不存在decode的方式

    c,如果z=1到9,这时候不仅要考虑自己,也还要考虑和前面一位结合的情况。当前一位是1,或者前一位是2,且这一位是1到6,这种情况下会产生新的编码,因为既有当前位独立的编码,也有和前面一位组合起来的编码;

    d,z单独编码的时候,dp[i]=dp[i-1],因为添加一个独立存在的字符并没有添加可能性

    e,z和y组合的情况,dp[i]=dp[i-2], 因为zy组合形成一种编码,对于dp[i-2]来说,并没有增加可能性

    f,综合d和e,得到dp[i]=dp[i-1]+dp[i-2]

   g, 如果前面以为不是1或者2,那z只能单独编码,所以dp[i]=dp[i-1]


5 同时需要知道dp[0] 和 dp[1]:当s[0]不等于0的时候,dp[0]=1;当s[0]等于0的时候,dp[0]=0。dp[1]和上面分析的通用情况是一样的


【Leetcode】91. Decode Ways_第2张图片

6 注意len(s)>1的时候,才有dp[1]出现,所以需要添加一个if len(s)>1的条件

7 ‘1’<=s[i]<='6',开始写错了,写成‘1’=


【Leetcode】91. Decode Ways_第3张图片

1 初始化dp时都初始化成1

2 current digit是‘7’,‘8’, ‘9’时,要注意前一位为1时的情形

你可能感兴趣的:(【Leetcode】91. Decode Ways)