zoukankan      html  css  js  c++  java
  • lintcode :最小路径和

    题目:

    给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。

    样例
     
    注意

    你在同一时间只能向下或者向右移动一步

    解题:

    这个和求三角形的最小路径的差不多,这里是个矩阵,第一列和第一行要单独处理,每一点的值等于自身的值加上上一点的值,对于中间节点:grid[i][j] + = min( grid[i-1][j] , grid[i][j-1]) ,也就是说,i j 点的值只能是其左侧的点或者上侧的点加过来,这个时间复杂度比较高O(N2)

    Java程序:

    public class Solution {
        /**
         * @param grid: a list of lists of integers.
         * @return: An integer, minimizes the sum of all numbers along its path
         */
        public int minPathSum(int[][] grid) {
            // write your code here
            int m = grid.length;
            if(m == 0 )
                return 0;
            int n = grid[0].length;
            if( n==0 )
                return 0;
            for(int i=1 ; i<n; i++ ){
                grid[0][i] += grid[0][i-1];
            }
            for( int i= 1;i< m; i++ ){
                grid[i][0] += grid[i-1][0];
            }
            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]); 
                }
            }
            return grid[m-1][n-1];
        }
    }
    View Code

    Python程序:

    class Solution:
        """
        @param grid: a list of lists of integers.
        @return: An integer, minimizes the sum of all numbers along its path
        """
        def minPathSum(self, grid):
            # write your code here
            m = len(grid)
            if m == 0:
                return 0
            n = len(grid[0])
            if n==0:
                return 0
            for i in range(m):
                for j in range(n):
                    if i==0 and j!=0:
                        grid[i][j] += grid[i][j-1]
                    elif j==0 and i!=0:
                        grid[i][j] += grid[i-1][j]
                    elif j!=0 and i!=0:
                        grid[i][j] += min(grid[i-1][j] , grid[i][j-1])
            return grid[m-1][n-1]
    View Code
  • 相关阅读:
    css3中的位置移动
    css中伪元素选择器
    css中伪类选择器
    html5之属性选择器
    html5的文本属性
    html5的视频和音频使用
    常用的linux命令
    常见的http状态码
    springboot之安装和启动es
    linux版本的jdk安装
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4887601.html
Copyright © 2011-2022 走看看