本着PHP是世界上最好的语言的原则。最近试着用php解决了下leecode上的算法问题,相关代码如下。有什么问题可以留言!欢迎大家指正!
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
解题思路
<?php
class Solution {
/**
* @param Integer[] $height
* @return Integer
*/
function trap($arr)
{
$res1 = $this->gerRes($arr, 1, -1);
$res2 = $this->gerRes($arr, 2, $this->hight);
$total= $res1 + $res2;
return $total?$total:0;
}
function gerRes($arr, $switch, $judge)
{
$lcc = false;
$lres_tmp = $lhight = 0;
while(!empty($arr)){
if($switch == 1) {
$ltmp = array_shift($arr);
}else{
$ltmp = array_pop($arr);
}
if ($switch == 2 && $judge == $ltmp) {
break;
}
if($ltmp >=$lhight){
$this->hight = $lhight = $ltmp;
$lcc = true;
}else{
$lres_tmp += $lhight - $ltmp;
}
if($lcc){
$res += $lres_tmp;
$lcc = false;
$lres_tmp = 0 ;
}
}
return $res;
}
}