leetcode -- Decode Ways -- dp题目

https://leetcode.com/problems/decode-ways/

解题思路:解码有多少种方法。一般求“多少”我们考虑使用dp。状态方程如下:

  • decode s[i], decode (s[i-1], s[i]). 当s[i-1], s[i]这两个字符是10~26但不包括10和20这两个数时,比如21,那么可以有两种编码方式(BA,U),所以dp[i]=dp[i-1]+dp[i-2]. 这里不要以为这里有3中decode方法,因为如果decode 2是一个code,1是一个code,这种2是一个code的方案应该放在dp[n-1]里面去考虑

  • 不能decode s[i]以及(s[i-1], s[i]), 但可以decode s[i-1]。 s[i-1]当s[i-1], s[i]等于10或者20时,由于10和20只有一种编码方式,所以dp[i]=dp[i-2]

  • 只能decode s[i]。当s[i-1], s[i]不在以上两个范围时,如09这种,编码方式为0,没有09对应的编码,只有9对应的编码,所以不能简单的判断第i个数与第i-1个数组成的数是否小于或者等于26来进行编码。而31这种,dp[i]=dp[i-1]。因为对于当前字符s[i]只有本身一种decode的方法,所以dp[i] = dp[i-1] * 1

  • 注意初始化时:dp[0]=1,dp[1]=1

参考http://www.cnblogs.com/zuoyuan/p/3783897.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值