LeetCode 892. 三维形体的表面积(Java)

892. 三维形体的表面积

在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。

示例 1:
输入:[[1,2],[3,4]]
输出:34

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:遍历数组,用一个变量来存总共有多少个立方体,另一个变量来存被遮盖的面数。

class Solution {
    public int surfaceArea(int[][] grid) {
        int block=0;//统计共有多少立方体
        int count=0;//统计共有多少面被遮盖
        for(int i=0;i<grid.length;i++)
        {
            for(int j=0;j<grid[i].length;j++)
            {
                block+=grid[i][j];//累加每个坐标上的立方体个数
                if(grid[i][j]!=0)
                {
                    count+=grid[i][j]-1;//统计上下被遮盖的面数,即上下叠放造成的遮盖
                }
                if(i>0)
                {
                    //统计前后叠放造成的遮盖的面数,每一行只需要统计前面被遮盖的面数,因为当前行后面被遮盖的面数被后一行前面被遮盖的面数包含了,只需要统计一次
                    count+=Math.min(grid[i][j],grid[i-1][j]);
                }
                if(j>0)
                {
                    count+=Math.min(grid[i][j],grid[i][j-1]);//统计左右叠放造成的遮盖面数
                }
            }
        }
        return block*6-count*2;
    }
}
发布了88 篇原创文章 · 获赞 0 · 访问量 2158

猜你喜欢

转载自blog.csdn.net/nuts_and_bolts/article/details/105093940