-
題目描述:在 N * N 的網格上,我們放置一些 1 * 1 * 1 的立方體。
每個值 v = grid[i][j] 表示 v 個正方體疊放在對應單元格 (i, j) 上。
請你返回最終形體的表面積。
-
示例 1:
輸入:[[2]]
輸出:10 -
示例 2:
輸入:[[1,2],[3,4]]
輸出:34 -
示例 3:
輸入:[[1,0],[0,2]]
輸出:16 -
示例 4:
輸入:[[1,1,1],[1,0,1],[1,1,1]]
輸出:32 -
示例 5:
輸入:[[2,2,2],[2,1,2],[2,2,2]]
輸出:46 -
提示:
1 <= N <= 50
0 <= grid[i][j] <= 50 -
題解(轉載:題解鏈接(含示意圖))
class Solution { public int surfaceArea(int[][] grid) { int n = grid.length, area = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // 先把grid[i][j]賦值給level,省掉了bound check,可以略微略微略微優化一下耗時。。。 int level = grid[i][j]; if (level > 0) { // 一個柱體中:2個底面 + 所有的正方體都貢獻了4個側表面積 area += (level << 2) + 2; // 減掉 i 與 i-1 相貼的兩份表面積 area -= i > 0? Math.min(level, grid[i - 1][j]) << 1: 0; // 減掉 j 與 j-1 相貼的兩份表面積 area -= j > 0? Math.min(level, grid[i][j - 1]) << 1: 0; } } } return area; } }
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。