題目
難度:★★☆☆☆
類型:幾何棒坏、數(shù)學、二維數(shù)組
在 N * N 的網(wǎng)格中,我們放置了一些與 x,y仗谆,z 三軸對齊的 1 * 1 * 1 立方體。
每個值 v = grid[i][j] 表示 v 個正方體疊放在單元格 (i, j) 上周荐。
現(xiàn)在舱殿,我們查看這些立方體在 xy、yz 和 zx 平面上的投影恒削。
投影就像影子池颈,將三維形體映射到一個二維平面上。
在這里钓丰,從頂部躯砰、前面和側面看立方體時,我們會看到“影子”携丁。
返回所有三個投影的總面積琢歇。
提示
1 <= grid.length = grid[0].length <= 50
0 <= grid[i][j] <= 50
示例
示例 1
輸入:[[2]]
輸出:5
示例 2
輸入:[[1,2],[3,4]]
輸出:17
解釋:
這里有該形體在三個軸對齊平面上的三個投影(“陰影部分”)兰怠。
三維形體投影面積
示例 3
輸入:[[1,0],[0,2]]
輸出:8
示例 4
輸入:[[1,1,1],[1,0,1],[1,1,1]]
輸出:14
示例 5
輸入:[[2,2,2],[2,1,2],[2,2,2]]
輸出:21
解答
每一個三維形體由若干底在同一平面的四棱柱組成,仔細觀察一個三維形體的三視圖我們可以發(fā)現(xiàn):
俯視圖的面積等于四棱柱的個數(shù)李茫;
正視圖的面積是每一行棱柱的最大高之和揭保;
側視圖的面積是每一列棱柱的最大高之和;
因此魄宏,只要按照上述要求求解即可秸侣。
class Solution:
def projectionArea(self, grid):
top_view = sum(v > 0 for row in grid for v in row)
front_view = sum(map(max, grid))
side_view = sum(map(max, zip(*grid)))
return sum([top_view, front_view, side_view])
如有疑問或建議,歡迎評論區(qū)留言~