博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
91. Decode Ways
阅读量:5093 次
发布时间:2019-06-13

本文共 1475 字,大约阅读时间需要 4 分钟。

DP[0]DP[1]几乎花了2/3的时间来考虑各种CASE,还是没考虑全,这个题思路不难,但是做对很难。。。

dp[i] 就是 0-i的所有可能性。

对于s.charAt(i)来说:

要么他自己作为一个数字,可以是1-9,此时dp[i]和dp[i-1]一样。是0的话就不行。。
要么他和前一位组成两位数,10-26,此时dp[i] 和 dp[i-2]一样,因为他把s.charAt(i-1)抢走了和自己抱团取暖了。

所以最终dp[i]的可能性就是上面所属的2种情况相加。

不会出现,一个数既要和前面组成,又要和后面组成。

继续刚才的步骤,用dp[i+1]来说,假如i+1要拿走i来和自己抱团取暖,那dp[i+1]是要加上dp[i-1],而dp[i-1]的所有可能性中,没有i和i-1抱团取暖的组合所以不影响..

这东西理解起来比叙述起来容易些。

然后最讨厌的是前两位数字,分成好几种可能:

首位是0,不行。
组成10或者20,dp[1] = 1。
30,40,50,60,70,80,90,也不行。。
11-19,21-26,dp[1] = 2。
其余,dp[1] = 1

不太容易想全,基本是提交之后才能发现错误。。

public class Solution {    public int numDecodings(String s)     {        if(s.length() == 0) return 0;        if(s.charAt(0) == '0') return 0;        if(s.length() == 1) return 1;                int[] dp = new int[s.length()];        dp[0] = 1;                int temp = Integer.valueOf(s.substring(0,2));                if(s.charAt(1) == '0')        {            if(temp == 10 || temp == 20) dp[1] = 1;            else return 0;        }        else if(temp <= 26) dp[1] = 2;        else dp[1] = 1;                for(int i = 2; i < s.length(); i++)        {            char tempC = s.charAt(i);            char prevC = s.charAt(i-1);                        dp[i] = tempC == '0'? 0:dp[i-1];                        if(prevC != '0' && Integer.valueOf(s.substring(i-1,i+1)) <= 26)            {                dp[i] += dp[i-2];            }                    }                        return dp[dp.length-1];    }}

转载于:https://www.cnblogs.com/reboot329/p/5880273.html

你可能感兴趣的文章
以下内容为Stackoverflow上整理以作纪录
查看>>
工业机器人常用语言---val语言介绍
查看>>
python3的包(package)在centos中的安装地址
查看>>
(3)Deep Learning之神经网络和反向传播算法
查看>>
Java Spring boot 企业微信点餐系统
查看>>
保持长宽比 对背景图像进行修改android:scaleType="fitXY"
查看>>
python-上传下载文件
查看>>
【转】如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误...
查看>>
HttpClient短信接口
查看>>
echo print printf() sprintf()区别
查看>>
https阿里云证书购买与apache环境配置
查看>>
21个js 技巧收藏
查看>>
PictureBox滚动条、鼠标中轴滚动
查看>>
Codeforces 475C Kamal-ol-molk&#39;s Painting 模拟
查看>>
G-Sensor 校准标准
查看>>
338. Counting Bits
查看>>
ArcGIS API For JS实现动态点扩散
查看>>
ios 自定义按钮
查看>>
在linux里如何建立一个快捷方式,连接到另一个目录
查看>>
类模板使用示例(二)类模板整体特化
查看>>