동적 계획 -minimum-path-sum

1845 단어 LeetCode
제목 설명
mxn의 행렬이 마이너스 정수를 채우고 왼쪽 상단에서 오른쪽 하단과 가장 작은 경로를 찾습니다.
주: 한 걸음 한 걸음 아래로 가든지 오른쪽으로 가든지.
반복 루틴:
public class Solution {
    public int minPathSum(int[][] grid) {
        if(grid == null||grid.length == 0||grid[0].length == 0)
            return 0;
        return help(grid,0,0);
    }
    public int help(int[][] grid,int row,int col)
        {
        if(row == grid.length-1&&col == grid[0].length-1)
            return grid[row][col];//  bottom right     
        
        if(row == grid.length-1&&col!=grid[0].length-1)//         
            return grid[row][col]+help(grid,row,col+1);
        if(col == grid[0].length-1&&row!=grid.length-1)//         
            return grid[row][col]+help(grid,row+1,col);
        else//    
            {
        int down=help(grid,row+1,col);
        int right=help(grid,row,col+1);
        if(down

DP 루틴:
public class Solution {
    public int minPathSum(int[][] grid) {
        if(grid == null||grid.length == 0||grid[0].length == 0)
            return 0;
        int row=grid.length;
        int col=grid[0].length;
       int[][] dp=new int[row][col];
        //       
        dp[row-1][col-1]=grid[row-1][col-1];
        //        
        for(int j=col-2;j>=0;j--)
            {
            dp[row-1][j]=dp[row-1][j+1]+grid[row-1][j];
        }
        //       
        for(int i=row-2;i>=0;i--)
            {
            dp[i][col-1]=dp[i+1][col-1]+grid[i][col-1];
        }
        //general
        for(int i=row-2;i>=0;i--)
            {
            for(int j=col-2;j>=0;j--)
                {
                int down=dp[i+1][j];
                int right=dp[i][j+1];
                dp[i][j]=down

.

좋은 웹페이지 즐겨찾기