题目原型:
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.
基本思路:
这是一道动态规划题,从图中可以看出,我们没次从右上角斜向下走来更新第n层的值,借助此数组更新数据,知道最后退出。
public int minPathSum(int[][] grid) { int lenOfRow = grid.length; int lenOfCol = grid[0].length; if (grid == null || lenOfRow == 0) return 0; int row = 0; int col = 0; int startRow = 0; int startCol = 0; while (true) { //如果起始点没达到最后一列 if(startCol+1<lenOfCol) startCol+=1; //如果起始点没达到最后一行 else if(startRow+1<lenOfRow) startRow+=1; //如果达到最后一行和一列,即终点,则退出 else break; row = startRow; col = startCol; //一般情况下,每次保证节点沿着左下方运行 while(row<lenOfRow&&col>=0) { //假如在第一行,则此节点的值只能由次行中的前一个节点决定 if(row==0) grid[row][col] = grid[row][col]+grid[row][col-1]; //如果在最后一列,则次节点的值只能由此列的前一个元素决定 else if(col==0) grid[row][col] = grid[row][col]+grid[row-1][col]; //否则,由此节点的前一行和前一列共同决定 else grid[row][col] = (grid[row-1][col]<grid[row][col-1]?grid[row-1][col]:grid[row][col-1])+grid[row][col]; row++; col--; } } return grid[lenOfRow-1][lenOfCol-1]; }
Minimum Path Sum,布布扣,bubuko.com
原文:http://blog.csdn.net/cow__sky/article/details/21325831