最小路径和
动态规划——中等
题目描述:
给定一个m*n的网格,网格用非负数填充,找到一条从左上角到右下角的最短路径。
注:每次只能向下或者向右移动。
动态规划
问题:
左上角到右下角的最小路径和,只能向下或向右移动
状态分析:
子问题:从(0,0)到(i,j)的最小路径和?
dp(i,j) : 从(0,0)到(i,j)的最小路径和
状态转移方程:
dp(i,j) = min(dp(i-1,j) , dp(i,j-1)) + array(i,j) ;
初始值:
顶部和左部都只有一条路径可达;
dp(0,0) = array(0,0);
返回值:
dp(i,j)
public int minPathSum (int[][] grid) {
// write code here
int row = grid.length;
int col = grid[0].length;
for(int i=1;i<col;i++){
grid[0][i] += grid[0][i-1];
}
for(int i=1;i<row;i++){
grid[i][0] += grid[i-1][0];
}
for(int i = 1;i<row;i++){
for(int j = 1;j<col;j++){
grid[i][j] += Math.min(grid[i-1][j],grid[i][j-1]);
}
}
return grid[row-1][col-1];
}
动规一点也不难!!!?