Leetcode PHP题解--D17 883. Projection Area of 3D Shapes


883. Projection Area of 3D Shapes

题目链接

883. Projection Area of 3D Shapes

题目分析

这个题目要求计算一个三维柱状图的“表面积”。

当输入为[[1,2],[3,4]]时如图所示。

底面为2+2=4,这个应该不用多说;
从x面看过去,左边前面的柱子高度为1,后面的柱子高度为2,故这一行取高度为2,右边柱子同理取4,因此2+4=6;
从y面后面看向x减少的方向时(从例图的右上看向左下时),前面的柱子挡住了后面的柱子,因此为3+4=7;
最后得4+6+7=17。

(例图上传不了,假装有例)

思路

从题目解析可以得知,每一面每一行(或每一列)取最大值相加即可。

传进来的是一个二维数组。
X固定时:二维数组的第1个元素代表x=1时,z的值(y轴的间隔为1);第2个元素代表x=2时,z的值。
那么我们先遍历x=1时的情况。显然用max函数取$grid[$i]的最大值2即可得z轴上的最大值。
当值为0时,没有柱子,也就不会在底面形成投影。故计算$grid[$i]中的非零元素个数既得在该列在底面上的投影。

已经解决了底面z面(从左上往右下看),那么剩下y轴(从左下往右上看)了。
计算二维数组每一个元素中,相同位置的值的最高值即可。(这个好像比较难描述)
A[i][0]的最大值遍历下去即可。

最终代码

<?php
class Solution {
    function projectionArea($grid) {
        $total = 0;
        foreach($grid[0] as $k => $c){
            $total += max(array_column($grid,$k));
        }
        foreach($grid as $key => $coord){
            $total += max($coord);
            $total += count(array_filter($coord));
        }
        return $total;
    }
}

若觉得本文章对你有用,欢迎用爱发电资助。


点赞 取消点赞 收藏 取消收藏

<< 上一篇: Leetcode之PHP版题目解析(189. Rotate Array)

>> 下一篇: 从0部署Office Web Apps服务,告别第三方处理office包吧