教育改变生活

标题: Java编程-带权值的最小路径和 [打印本页]

作者: 一秉    时间: 2020-9-8 17:32
标题: Java编程-带权值的最小路径和
题目描述
给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。
注意:你每次只能向下或向右移动。
示例1
输入:[[1,2],[5,6],[1,1]]
输出:8
分析:(by 时光若止~Dale)
动态规划
状态:
子状态:从(0,0)到达(1,0),(1,1),(2,1),...(m-1,n-1)的最短路径
F(i,j): 从(0,0)到达F(i,j)的最短路径
状态递推:
F(i,j) = min{F(i-1,j) , F(i,j-1)} + (i,j)
初始化:
F(0,0) = (0,0)
特殊情况:第0行和第0列
F(0,i) = F(0,i-1) + (0,i)
F(i,0) = F(i-1,0) + (i,0)
返回结果:
F(m-1,n-1)
代码:
import java.util.*;


public class Solution {
    /**
     *
     * @param grid int整型二维数组
     * @return int整型
     */
    public int minPathSum (int[][] grid) {
        // write code here
        int m=grid.length;
        int n=grid[0].length;
        if(m==0 && n==0){
            return 0;
        }
        for(int i=1;i<m;i++){
            grid[i][0]=grid[i-1][0]+grid[i][0];
        }
        for(int j=1;j<n;j++){
            grid[0][j]=grid[0][j-1] +grid[0][j];
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                grid[i][j]=Math.min(grid[i-1][j],grid[i][j-1])+grid[i][j];
            }
        }
        return grid[m-1][n-1];
    }
}








欢迎光临 教育改变生活 (http://bbs.goldoar.com/) Powered by Discuz! X3.2