数字三角形
来源:互联网 发布:知乎 扒皮 编辑:程序博客网 时间:2024/06/15 08:38
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
注意事项
如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。
您在真实的面试中是否遇到过这个题? Yes
样例
比如,给出下列数字三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
注意事项
如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。
您在真实的面试中是否遇到过这个题? Yes
样例
比如,给出下列数字三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。
import java.util.Scanner;/** * 给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 注意事项如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。您在真实的面试中是否遇到过这个题? Yes样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。 * * @author Dell * */public class Test109 { public static int minimumTotal(int[][] triangle) { int m=triangle.length; int min=Integer.MAX_VALUE; int[][] dp=new int[m][m]; dp[0][0]=triangle[0][0]; for(int i=1;i<m;i++) { for(int j=0;j<=i;j++) { if(j==0) dp[i][j]=dp[i-1][j]+triangle[i][j]; else if(j==i) dp[i][j]=dp[i-1][j-1]+triangle[i][j]; else { dp[i][j]=Math.min(dp[i-1][j-1], dp[i-1][j])+triangle[i][j]; } } } for(int i=0;i<m;i++) { if(dp[m-1][i]<min) { min=dp[m-1][i]; } } return min; }public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt();int[][] triangle=new int[n][]; for(int i=0;i<n;i++) { triangle[i]=new int[i+1]; for(int j=0;j<i+1;j++) { triangle[i][j]=sc.nextInt(); } } System.out.println(minimumTotal(triangle)); }}
阅读全文
0 0
- 数字三角形!
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- Java 类——权限修饰符
- Git教程 —— 分支管理
- Leetcode 337. House Robber III
- [未完]linux配置文件整理
- 布局管理器——表格布局
- 数字三角形
- 配置mybatis解决log4j未正常打印sql的问题
- Retrofit:打造自己的Converter之byte[]
- POJ 1848 Tree 笔记
- 在win7,pycharm编译器下配置第一个django程序
- 【实训】Android中xml动画定义
- 计算几何练习2
- LeetCode--46. Permutations
- 关于indexOf的巧妙使用