这是一道很经典的问题:
题目描述:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
算法思路:
1 import java.util.*; 2 class Solution { 3 public int minimumTotal(List<List<Integer>> triangle) { 4 int lenRow=triangle.size(); 5 int lenCol=triangle.get(lenRow-1).size(); 6 int[][] dp=new int[lenRow][lenCol]; 7 for (int i=0; i<lenCol; i++) { 8 dp[lenRow-1][i]=triangle.get(lenRow-1).get(i); 9 } 10 for (int i=lenRow-1; i>0; i--) { 11 for (int j=0; j<triangle.get(i-1).size(); j++) { 12 int num=triangle.get(i-1).get(j); 13 dp[i-1][j]=Math.min(dp[i][j]+num,dp[i][j+1]+num); 14 } 15 } 16 return dp[0][0]; 17 } 18 }
下面一题也是非常经典的动态规划题目,最长上升子序列(LeetCode300)
欢迎评论,共同进步!!