day12 (892. 三維形體的表面積)*

  • 題目描述:在 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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章