Triangle
来源:互联网 发布:游戏破解软件下载 编辑:程序博客网 时间:2024/06/15 04:03
https://oj.leetcode.com/problems/triangle/
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).
Note:
Bonus point if you are able to do this using only O(n) extra space, wheren is the total number of rows in the triangle.
public int minimumTotal(List<List<Integer>> triangle)
这一题和Pascal Triangle有相似的一点也有不相似的一点。
从第二层开始考虑的时候f(i,j) = Math.min(f(i - 1, j), f(i - 1, j - 1)) + triangle[i][j]
事实上这一题不仅可以O(n) extra space,这题是可以 in place的,在循环递归的时候,把上述的f(i,j)直接换成triangle[i][j]即可,就从上可以在内部不停往下传递较小路径的答案。
到最后一层的时候就是所有较小路径的答案,然后把其中最小的挑出来就可以了
public int minimumTotal(List<List<Integer>> triangle) { int res = Integer.MAX_VALUE; List<Integer> prev = null; for(int j = 0; j < triangle.size(); j++){ List<Integer> cur = triangle.get(j); for(int i = 0; i < cur.size(); i++){ int cur_val = cur.get(i); if(prev != null){ int plus_val = i == 0 ? prev.get(i) : (i == cur.size() - 1 ? prev.get(i - 1) : Math.min(prev.get(i), prev.get(i - 1))); cur_val += plus_val; } if(j == triangle.size() - 1) res = Math.min(res, cur_val); cur.set(i, cur_val); } prev = cur; } return res; }
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- HDU 3549 Flow Problem (最大流)
- 同时找到最大值和最小值——编程之美
- Linux top里面%CPU和us%的解释
- Android 完美适配多分辨率总结
- Remove Duplicates from Sorted List && Merge Two Sorted Lists && Linked List Cycle && Remove Nth Node
- Triangle
- MYSQL 在字段里现有内容后面添加字符串
- 涂鸦组件
- SharePoint 2010 使用Session
- OLTP和OLAP
- Linux-FTP服务器终端窗口用命令进行启动.
- myeclipse 在文本框上出现一个类包的视图
- 常出现的Access denied for user 'root'@'localhost' (using password: YES)及其相关问题解决
- 题目1389:变态跳台阶