二维 动态规划
public int minPathSum (int[][] matrix) { // write code here int m = matrix.length; int n = matrix[0].length; int[][] dp = new int[m][n]; dp[0][0] = matrix[0][0]; for(int i = 1; i < m; i++) dp[i][0] = matrix[i][0]+dp[i-1][0]; for(int i = 1; i < n; i++) dp[0][i] = matrix[0][i]+dp[0][i-1]; for(int i = 1; i < m; i++){ for(int j = 1; j < n; j++){ dp[i][j] = matrix[i][j] + Math.min(dp[i-1][j],dp[i][j-1]); } } return dp[m-1][n-1]; }
降维
public int minPathSum (int[][] matrix) { int m = matrix.length; int n = matrix[0].length; int[] dp = new int[n]; dp[0] = matrix[0][0]; for(int i = 1; i < n; i++){ dp[i] = dp[i-1]+matrix[0][i]; } for(int i = 1; i < m; i++){ dp[0] += matrix[i][0]; for(int j = 1; j < n; j++){ dp[j] = Math.min(dp[j],dp[j-1]) + matrix[i][j]; } } return dp[n-1]; }