Leetcode动态规划之PHP解析(120. Triangle)

栏目: PHP · 发布时间: 6年前

内容简介:动态规划题第二天

2 0 1 9 -5 -18   期六    

上一题链接: Leetcode动态规划之 PHP 解析(70. Climbing Stairs)

动态规划题第二天

Leetcode动态规划之PHP解析(120. Triangle)

给定一个三角形,好吧,其实就是一个二维数组,让我们求从上至下的最小路径和,往下一层,你只能移动相邻之间的两个数。

题目解析

还是使用动态规划的两个步骤。1.定义好状态2.求出递推的公式。递归和动态规划有一个不同的地方就是递归是自上而下,比如在这里从上面一层一层的计算调用,到了递归的出口,又一层一层的回来。而动态规划是自下而上进行思考。对于这里状态定义,我们现在是从下往上的概念,当前是一个二维数组。

Leetcode动态规划之PHP解析(120. Triangle)

所以我们可以推出它的递推公式。

Leetcode动态规划之PHP解析(120. Triangle)

我们把路径最短值存在(用坐标来说就是横坐标i,纵坐标j的位置),所以最终只需要返回(0,0)坐标即二维数组$dp[0][0]位置的值即可。

具体实现

/**
     * @param Integer[][] $triangle
     * @return Integer
     */
    function minimumTotal($triangle) {

     if(empty(count($triangle))){
         return 0;
     }
        for($i=count($triangle)-1;$i>=0;$i--){
            for($j=0;$j<count($triangle[$i]);++$j){
                $triangle[$i][$j] +=min($triangle[$i+1][$j],$triangle[$i+1][$j+1]);
            }
        }
        return $triangle[0][0];
    }

我们也可以把结果存在一个一维数组中。因为我们每次计算的时候并不需要通过所以层的结果,只需要一层的结果就能算出当前层的结果。所以数组的初始值是最后一层,因为最后一层的最小值就是他自己,然后从倒数第二层开始递推。

/**
     * @param Integer[][] $triangle
     * @return Integer
     */
    function minimumTotal($triangle) {
        if(empty(count($triangle))){
         return 0;
     }
        $res=$triangle[count($triangle)-1];
        for($i=count($triangle)-2;$i>=0;$i--){
            for($j=0;$j<count($triangle[$i]);++$j){
                $res[$j]=$triangle[$i][$j]+min($res[$j],$res[$j+1]);
            }
        }
        return $res[0];
    }

Github整理地址: https://github.com/wuqinqiang/leetcode-php


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者

创新者

[美] 沃尔特 · 艾萨克森 / 关嘉伟、牛小婧 / 中信出版社 / 2016-6 / 88.00

讲述了计算机和互联网从无到有的发展历程,并为我们生动地刻画出数字时代的创新者群像。 在近200年的数字化进程中群星闪耀,艾萨克森从一个计算机程序的创造者、诗人拜伦之女埃达说起,细数了这一群站在科学与人文交叉路口的创新者,他们包括通用型电子计算机的创造者奠奇利、科学家冯·诺依曼、仙童半导体公司的“八叛逆”、天才图灵、英特尔的格鲁夫、微软的比尔·盖茨、苹果公司的乔布斯、谷歌的拉里·佩奇等。《创新......一起来看看 《创新者》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码