minimum-path-sum
/**
* 给定一个由非负整数填充的m x n的二维数组,
* 现在要从二维数组的左上角走到右下角,
* 请找出路径上的所有数字之和最小的路径。
* 注意:你每次只能向下或向右移动。
*
* Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
* Note: You can only move either down or right at any point in time.
*/
/** * 给定一个由非负整数填充的m x n的二维数组, * 现在要从二维数组的左上角走到右下角, * 请找出路径上的所有数字之和最小的路径。 * 注意:你每次只能向下或向右移动。 * * Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. * Note: You can only move either down or right at any point in time. */ public class Main52 { public static void main(String[] args) { int[][] grid = new int[3][7]; System.out.println(Main52.minPathSum(grid)); } public static int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[][] dp = new int[m][n]; dp[0][0] = grid[0][0]; //第一行 for (int i = 1; i < n; i++) { dp[0][i] = dp[0][i-1] + grid[0][i]; } //第一列 for (int i = 1; i < m; i++) { dp[i][0] = dp[i-1][0] + grid[i][0]; } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j]; } } return dp[m-1][n-1]; } }