LeetCode OJ 64. Minimum Path Sum

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 x n的格子,每一个格子上是一个非负整数,找到从左上角到右下角的路线,它所经过的格子的值的和最小,返回这个最小值。要求只能每一步只能向右或者向下移动。


【思路】

在前面的几个题目的基础上我们不难想出解决办法。

1. 对于第一行,A[0][j] += A[0][j-1];

2. 对于第一列,A[i][0] += A[i-1][0];

3. 对于其他值,A[i][j] += min(A[i-1][j],A[i][j-1]);

---->---->

通过这几个图我们可以看到求解的过程。


【java代码】

 1 public class Solution {
 2     public int minPathSum(int[][] grid) {
 3         int row = grid.length;
 4         int col = grid[0].length;
 5         
 6         if(row == 0 || col == 0) return 0;
 7         
 8         int[] dp = new int[col];
 9         dp[0] = grid[0][0];
10         for(int j = 1; j < col; j++)
11             dp[j] = grid[0][j] + dp[j-1];
12         
13         for (int i = 1; i < row; i++){
14             dp[0] += grid[i][0];
15             for (int j = 1; j < col; j++){
16                 dp[j] = Math.min(dp[j-1], dp[j]) + grid[i][j];
17             }
18         }
19                 
20         return dp[col - 1];
21     }
22 }

 

posted @ 2016-05-28 12:07  Black_Knight  阅读(240)  评论(0编辑  收藏  举报