算法练习-动态规划-最小路径
最小路径和
题目
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
思路
动态规划问题
当前这一步最小值等于这一步上或左的较小值加上当前这一步的值
即max(dp[i-1][j]+dp[i][j-1])+grid[i][j]
思路
class Solution {
public int minPathSum(int[][] grid) {
int y=grid.length;
int x=grid[0].length;
int [][] dp=new int[y+1][x+1];
for(int i=0;i<y;i++){
for(int j=0;j<x;j++){
if(i==0&&j==0){
dp[i][j]=grid[i][j];
}
else if (i==0&&j>0){
dp[i][j]=dp[i][j-1]+grid[i][j];
}
else if(i>0&&j==0){
dp[i][j]=dp[i-1][j]+grid[i][j];
}
else {
dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
}
return dp[y-1][x-1];
}
}
浙公网安备 33010602011771号