LeetCode:892. 三维形体的表面积

题目

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

示例 5:
输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:46

提示:
1 <= N <= 50
0 <= grid[i][j] <= 50

代码

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
    //统计所有的立方体数量
    int blocks = 0;
    //统计有多少个面被其他面盖住,那么就在所有的立方体的表面积上减去被盖住的面数×2(因为盖住一个面需要另一个面来盖,所以会损失2个面);
    int cover = 0;
    for(int i = 0;i < grid.size();++i) {
        for(int j = 0; j < grid[0].size();++j) {
            blocks += grid[i][j];
            //这个是统计当前格子中因为堆叠而盖住了几个面
            cover += grid[i][j] > 1 ? grid[i][j] -1 : 0;
            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 blocks * 6 - cover * 2;
    }
};

思路

读了几遍,放弃了,没读懂。看了下大佬们的思路,感觉就不难了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值