博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] Triangle
阅读量:5134 次
发布时间:2019-06-13

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

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).

 

思路:DP,从最底层递推上去。dp[i][j]表示第i层j个元素为起点的最小路径和。

  递推公式:dp[i][j]=value[i][j]+min{dp[i+1][j],dp[i+1][j+1};

  因为每一层只跟下一层相关,所以只需一维状态即可。

 

public class Solution {    public int minimumTotal(List
> triangle) { int n = triangle.size(); int[] dp = new int[n]; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j <= i; j++) { if (i == n - 1) dp[j] = triangle.get(i).get(j); else dp[j] = triangle.get(i).get(j) + Math.min(dp[j], dp[j + 1]); } } return dp[0]; } public static void main(String[] args) { List
> triangle = new ArrayList
>(); triangle.add(Arrays.asList(new Integer[] { 2 })); triangle.add(Arrays.asList(new Integer[] { 3, 4 })); triangle.add(Arrays.asList(new Integer[] { 6, 5, 7 })); triangle.add(Arrays.asList(new Integer[] { 4, 1, 8, 3 })); System.out.println(new Solution().minimumTotal(triangle)); }}

 

 第二遍记录:

先画二维的,然后根据递推顺序转化成一维的。

 

第三遍记录:

  二维和一维都要注意纵坐标的范围,不要越界。

  一维递推的时候注意要 自下而上,自左而右。

 

转载于:https://www.cnblogs.com/jdflyfly/p/3823362.html

你可能感兴趣的文章
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>
poj2569
查看>>
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>
jQuery EasyUI 的下拉选择combobox后台动态赋值
查看>>
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>