120. Triangle

我的解法用了一个二维数组,这样比较浪费空间。O(n*n)

但是标准答案自底向上,一是不需要进行特别判断,二是可以覆盖数组,则只需要O(n)的空间大小。

class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int size = triangle.size();
if(size == 1) return triangle.get(0).get(0);
int[][] dp = new int[size][size];
dp[0][0] = triangle.get(0).get(0);
int min = Integer.MAX_VALUE;
for(int i = 1; i < size; i++){
for(int j = 0; j <= i; j++){
dp[i][j] = triangle.get(i).get(j);
if(j == 0){
dp[i][j] += dp[i - 1][j];
}else if(j == i){
dp[i][j] += dp[i - 1][j - 1];
}else dp[i][j] += Math.min(dp[i - 1][j - 1], dp[i - 1][j]);
if(i == size - 1) min = Math.min(min, dp[i][j]);
}
}
return min;
}
}

他山之石:

class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int size = triangle.size();
int[] dp = new int[size + 1];
for(int i = size - 1; i >= 0; i--){
for(int j = 0; j < triangle.get(i).size(); j++){
dp[j] = Math.min(dp[j], dp[j+1]) + triangle.get(i).get(j);
}
}
return dp[0];
}
}

64. Minimun Path Sum

和上一题思路基本一致,采用了上一题的思路,只用了一个1d array。

class Solution {
public int minPathSum(int[][] grid) {
if(grid.length == 0) return 0;
int m = grid.length;
int n = grid[0].length;
int[] dp = new int[n];
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j++){
if(i == 0 && j == 0){
dp[j] = grid[0][0];
}else if(i == 0){
dp[j] = grid[i][j] + dp[j - 1];
}else if(j == 0){
dp[j] = grid[i][j] + dp[j];
}else dp[j] = Math.min(dp[j - 1], dp[j]) + grid[i][j];
}
}
return dp[n-1];
}
}

62 Unique Path

还是一样的思路, 可以稍微简化一下,有一些值例如 j = 0的情况可以不需要便利。

class Solution {
public int uniquePaths(int m, int n) {
if( m <= 0 || n <= 0) return 0;
int[] ans = new int[n];
ans[0] = 1;
for(int i = 0; i < m; i++){
for(int j = 1; j < n; j++){
if(i == 0){
ans[j] = ans[j - 1];
}else ans[j] = ans[j] + ans[j - 1];
}
}
return ans[n - 1];
}
}

91 Decode Ways

class Solution {
public int numDecodings(String s) {
int len = s.length();
if(len == 0) return 0;
int[] dp = new int[len + 1];
dp[0] = 1;
dp[1] = s.charAt(0) == '0' ? 0 : 1;
for(int i = 2; i <= len; i++){
int first = Integer.parseInt(s.substring(i - 1, i));
int second = Integer.parseInt(s.substring(i - 2, i));
if(first > 0){
dp[i] += dp[i - 1];
}
if(second >= 10 && second <= 26){
dp[i] += dp[i - 2];
}
}
return dp[len];
}
}

这道题不难,但是有很多cornercase 需要处:

两位数不能大于26 不能小于10 否则无法构成两位数

一位数必须大于0

所以最好的方法还是分别取出两位数和个位数看是否符合条件,如果符合条件就加上。

LeetCode6 dp的更多相关文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  2. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  3. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  4. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  8. px、dp和sp,这些单位有什么区别?

    DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...

  9. android px转换为dip/dp

    /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...

随机推荐

  1. Go语言_流程控制语句:for、if、else、switch 和 defer

    流程控制语句:for.if.else.switch 和 defer 学习如何使用条件.循环.分支和推迟语句来控制代码的流程. Go 作者组编写,Go-zh 小组翻译. https://go-zh.or ...

  2. Vue / keep-alive使用

    keep-alive keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 <keep-aliv ...

  3. javascript的继承模式

    在javascript里面看到javascript的继承模式和传统的继承模式是有区别的,就想查资料看一下到底有区别,就看到了这篇文章,觉得讲得还可以,暂时先放上来,以后有别的东西再补充: http:/ ...

  4. 通用的规则匹配算法(原创)(java+.net)

    1.java里可以使用Spring的 Spel或者Google的Aviator 如果使用 Aviator 则添加以下依赖 <dependency> <groupId>com.g ...

  5. vue,一路走来(14)--短信验证码框的实现(类似支付密码框)

    由于项目的扩展,新增了很多功能,今天谈一下短信验证码框的实现. 思路:每个小方框其实就是单独的每一个input标签(叫假input标签),每个长度为1,然后上面再写一个大的input标签(叫真实inp ...

  6. nuxtJs - axios 的 IE 兼容性的问题

    因为考虑SEO, 所以采用nuxt.js进行服务端渲染, 用熟了vue, nuxt无缝对接简直不要太爽 烦人的需求又来了, 要兼容IE ~~ 兼容处理 无非就是babel 将高级语法转成弱智IE看得懂 ...

  7. Python 的 zip 和 dict 组合 生成新字典

    >>> d = dict(zip(['a', 'b'], [1, 2]))>>> d{'a': 1, 'b': 2}>>> d = dict(zi ...

  8. Gene Ontology (GO) 注释

    Gene Ontology (GO) 注释  Posted on 2017-06-11 |  In 生信 相似的基因在不同物种中,其功能往往保守的.显然,需要一个统一的术语用于描述这些跨物种的同源基因 ...

  9. Java Web学习总结(3)Servlet(二)

    一,Servlet访问URL映射配置 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml ...

  10. Oracle序列重置

    Oracle 中的序列我们一般用来生成流水号,所以需要进行重置(如每天凌晨重置一次),我们虽然可以通过重新编译的方式重置序列,可是这种方法会有弊端,比如导致与该序列相关的存储过程或函数失效等等,需要重 ...