欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

892. 三维形体的表面积

程序员文章站 2024-03-15 11:26:47
...

题目描述

892. 三维形体的表面积

思路

统计有多少个立方体sum,然后统计一下有多少相邻互相覆盖的面cover(有多少个面被其它面盖住)
最终表面积 = sum * 6 - cover * 2;

代码

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        if(grid.size() < 1)
            return 0;
        int sum = 0;
        int cover = 0;
        for(int i = 0; i < grid.size() ; i++)
        {
            for(int j = 0; j < grid[i].size() ; j++)
            {
            //加上这一个位置的立方体数
                sum += grid[i][j];
                if(grid[i][j] > 1)
                {
                //如果这一位置立方体数大于一,说明有覆盖。加上如果有两个立方体就有一个覆盖。所以记得减1
                    cover += grid[i][j] - 1;
                }
                if(i > 0)
                {
                //加上上一行同一列的覆盖
                    cover += min(grid[i-1][j], grid[i][j]);
                }
                if(j > 0)
                {
                //加上上一列同一行的覆盖
                    cover += min(grid[i][j-1], grid[i][j]);
                }
            }
        }
        return sum * 6 - cover * 2;
    }
};