leetCode-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

扫描二维码关注公众号,回复: 10767063 查看本文章


示例 5:

输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:46
 

提示:

1 <= N <= 50
0 <= grid[i][j] <= 50

解题思路:

分别从三个维度计算表面积:
(1)先考虑垂直角度的面积:每个柱体是由:2个底面(上表面/下表面)+ 4个侧表面积;
(2)再减去列之间的重叠面积;
(3)最后再减去行之间的重叠面积;
最后得到的就是总的面积

代码实现:

class Solution {
    public int surfaceArea(int[][] grid) {
        int n = grid.length;
        int area = 0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                int layer = grid[i][j];
                if(layer > 0){
                    //每个柱体是由:2个底面(上表面/下表面)+ 4个侧表面积
                    area += layer*4+2;
                }
                if(i>0){
                    //减掉列之间重叠的表面积
                    area -= Math.min(layer,grid[i-1][j])*2;
                }
                if(j>0){
                    //减掉行之间重叠的表面积
                    area -= Math.min(layer,grid[i][j-1])*2;
                }
            }
        }
        return area;

    }
}

复杂度分析

  • 时间复杂度:O(N^2),其中 N是 grid 中的行和列的数目。

  • 空间复杂度:O(1)。

发布了157 篇原创文章 · 获赞 1 · 访问量 2675

猜你喜欢

转载自blog.csdn.net/qq_34449717/article/details/105107830
今日推荐