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; } }
若覺得本文章對你有用,歡迎用愛發電 資助。