【leetcode】892. 三维形体的表面积(surface-area-of-3d-shapes)(数学)[简单]

215 篇文章 0 订阅
9 篇文章 0 订阅

链接

https://leetcode-cn.com/problems/surface-area-of-3d-shapes/

耗时

解题:18 min
题解:16 min

题意

给定一个在 N ∗ N N*N NN 的网格,网格上放置有一些单位立方体( 1 ∗ 1 ∗ 1 1 * 1 * 1 111)。网格上的数字 grid[i][j] 代表当前的格子(i,j)上有 grid[i][j] 个立方体。问这些立方体所组成的形体的表面积?

思路

如果没有遮挡,每个格子上的立方体表面积是 4 ∗ g r i d [ i ] [ j ] + 2 4*grid[i][j]+2 4grid[i][j]+2

先计算无遮挡情况下每个格子上立方体的表面积,再减去遮挡面积,即可得出最终表面积。

遮挡面积具体实现:检查当前格子 上、下、左、右 四个方位是否出网格,如果没有则减去遮挡面积( m i n ( g r i d [ i ] [ j ] , g r i d [ x ] [ y ] ) min(grid[i][j], grid[x][y]) min(grid[i][j],grid[x][y]))。注意当网格上没有立方体时,按照计算公式仍会得出 2 的表面积,所以需要特判一下直接 continue

AC代码

class Solution {
public:
    bool check(int x, int y, int n) {
        if((x >= 0 && x < n) && (y >= 0 && y < n)) 
            return true;
        return false;
    }
    int surfaceArea(vector<vector<int>>& grid) {
        int n = grid.size();
        int ans = 0;
        int dir[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                if(grid[i][j] == 0) continue;
                ans += 4*grid[i][j]+2;
                for(int d = 0; d < 4; ++d) {
                    int x = i+dir[d][0];
                    int y = j+dir[d][1];
                    if(check(x, y, n)) {
                        ans -= min(grid[i][j], grid[x][y]);    
                    }    
                } 
            }
        }
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值