標籤:math logs 一點 span time find rom else note
題目:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
題意及分析:給出一個m*n大的網格,每個網格中的數字都為非負的術,每次能向右或者向下移動一格,求找到從最左上方的格子到最右下角的格子和最小的路徑。本題我採用動態規劃的解法,對於其中一點grid[i][j](i<i<m.i<j<n),因為只有兩種方法到達該點,所以到這點的最短路徑只能是上一點或者左邊的點的最短路勁加上當前點的值,即d(grid[i][j])=min{d(grid[i][j-1]),d(grid[i-1][j])} + grid[i][j]。對於第一行或者第一列來說都只有一種情況到達該點,所以需要直接由前一個點的最短路徑加上當前點值即可。遍曆整個網格,便可以得到最終值。
代碼:
public class Solution {public int minPathSum(int[][] grid) { int m=grid.length;//行 int n=-1;//列 if(m!=0) n=grid[0].length; int[][] A=new int[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(i==0||j==0){ if(i==0&&j!=0){ A[i][j]=A[i][j-1]+grid[i][j];//第一行的值等於前一個值加上當前值 }else if(i!=0&&j==0){ A[i][j]=A[i-1][j]+grid[i][j];//第一列的值等於加上當前格子的值 }else { A[i][j]=grid[i][j];//起始點,就為起始點本身的值} }else{ A[i][j]=Math.min(A[i][j-1]+grid[i][j],A[i-1][j]+grid[i][j]); } } } return A[m-1][n-1]; }}
LeetCode 64. Minimum Path Sum Java