zoukankan      html  css  js  c++  java
  • LintCode Python 简单级题目 109.数字三角形

    原题描叙 :

    给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

     注意事项

    如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。

    样例

    比如,给出下列数字三角形:

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    

    从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

    题目分析:

    思路:

      从二维数组的倒数第二行开始往上,每一行的元素改为下一行能与之相加的两个数较小者与其相加之后的和,如题中给出的例子,步骤为:

      

      [                                 [            [
           [2],              [2],          [11]
          [3,4],    →        [9,10]   →     ]
         [7,6,10]           ]
      ]

    参照:http://www.cnblogs.com/xiaocainiao2hao/p/5359892.html

    class Solution:
        """
        @param triangle: a list of lists of integers.
        @return: An integer, minimum path sum.
        """
        def minimumTotal(self, triangle):
            # write your code here
            n = len(triangle)
            if triangle is None:
                return None
            elif triangle[0][0] is None:
                return None
            elif n == 1: # 此处if分支可省略
                return triangle[0][0]
                
            # 将triangle[i+1][j]和triangle[i+1][j+1]中的小值加到上一行的triangle[i][j]中
            for i in range(n-2,-1,-1):
                le = len(triangle[i])
                for j in range(0,le):
                    minx = min(triangle[i+1][j],triangle[i+1][j+1])
                    triangle[i][j] += minx
            return triangle[0][0]
    

      

  • 相关阅读:
    Java-判断一个数是不是素数
    Sublime快捷键
    python
    全排列
    python
    python
    OpenCV 实现图像结构相似度算法 (SSIM 算法)
    C++
    C++
    NFA 转 DFA
  • 原文地址:https://www.cnblogs.com/bozhou/p/6945947.html
Copyright © 2011-2022 走看看