选择,一般都是用动态规划
最小路径和 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 : 输入:grid [[,,],[,,],[,,]] 输出:7 解释:因为路径 →3→1→1→1 的总和最小。 示例 : 输入:grid [[,,],[,,]] 输出:12 提示: m grid.length n grid[i].length m, n grid[i][j]
class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[][] memo = new int[m][n]; for (int[] row : memo) { Arrays.fill(row, -1); } return dp(grid, m - 1, n - 1, memo); } int dp(int[][] grid, int i, int j, int[][] memo) { if (i == 0 && j == 0) { return grid[0][0]; } if (i < 0 || j < 0) { return Integer.MAX_VALUE; } if (memo[i][j] != -1) { return memo[i][j]; } memo[i][j] = Math.min(dp(grid, i - 1, j, memo), dp(grid, i, j - 1, memo)) + grid[i][j]; return memo[i][j]; } }