LeetCode -- Tiangle
2016-04-11 21:41
344 查看
Question:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
The minimum path sum from top to bottom is
Analysis:
给出一个三角形,找到从顶部到底部的最小路径。每次跨行移动时只能在相邻的元素间移动。示例如上。
显然用DP,初始条件dp[0][0] = 顶部第一个元素。
状态转移方程为:
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
当然要注意每行的最后一个元素和第一个元素,只有一个来源。
最后再找出最后一行中最小的数值即可。
本来是很简单的,但是由于是List取数时没有数组方便,因此调bug花了一些时间。。。
代码如下:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is
11(i.e., 2 + 3 + 5 + 1 = 11).
Analysis:
给出一个三角形,找到从顶部到底部的最小路径。每次跨行移动时只能在相邻的元素间移动。示例如上。
显然用DP,初始条件dp[0][0] = 顶部第一个元素。
状态转移方程为:
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
当然要注意每行的最后一个元素和第一个元素,只有一个来源。
最后再找出最后一行中最小的数值即可。
本来是很简单的,但是由于是List取数时没有数组方便,因此调bug花了一些时间。。。
代码如下:
public class Solution { public int minimumTotal(List<List<Integer>> triangle) { if(triangle == null || triangle.size() == 0) return 0; if(triangle.size() == 1) return triangle.get(0).get(0); List<ArrayList<Integer>> dp = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> dp0 = new ArrayList<Integer>(); dp0.add(triangle.get(0).get(0)); dp.add(dp0); int row = triangle.size(); for(int i=1; i<row; i++ ) { ArrayList<Integer> dpi = dp.get(i-1); List<Integer> tempi = triangle.get(i); ArrayList<Integer> dpii = new ArrayList<Integer>(); int col = tempi.size(); for(int j=0; j<col; j++) { if(j == 0) dpii.add(dpi.get(j)+tempi.get(0)); else if(j < dpi.size()){ dpii.add(Math.min(dpi.get(j-1), dpi.get(j)) + tempi.get(j)); } else dpii.add(dpi.get(j-1) + tempi.get(j)); } dp.add(dpii); } int min = Integer.MAX_VALUE; dp0.clear(); dp0 = dp.get(dp.size()-1); for(int i=0; i<dp0.size(); i++) if(min > dp0.get(i)) min = dp0.get(i); return min; } }
相关文章推荐
- 【BZOJ-1911】特别行动队 DP + 斜率优化
- NFS
- 大数据时代的精准数据挖掘——使用R语言
- linux 下使用 tc 模拟网络延迟和丢包
- webservice 入门笔记五handler处理信息
- Hadoop 2.6.0集群的安装
- android照相、图片压缩
- 2016年大数据工程师必备的9项技能
- 算法--排序和查找
- 结对项目总结
- 商品管理数据表设计
- ios动画效果学习
- ios动画效果学习
- 数组对换位置
- Hdu oj 2066 一个人的旅行(floyd剪枝)
- Firemonkey 自定义Button的Style
- 2016年大数据工程师必备的9项技能
- 工厂三层结构环境的搭建
- 把Ubuntu用户目录下的目录名改成英文
- php循环生成的表单如何获得其各项值案例