码迷,mamicode.com
首页 > 其他好文 > 详细

892. 三维形体的表面积

时间:2020-04-12 07:44:32      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:turn   int   输入   +=   amp   思路   solution   表示   i++   

描述

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

示例 1:
输入:[[2]]
输出:10

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

思路

本质上是到数学题,有两种方法解决

  • 方法1
    计算每个正方体贡献的表面积=2+4个方向上高与相邻立方体的高的差值
class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        int dx[]={1,0,-1,0};
        int dy[]={0,-1,0,1};
        int v=0,len=grid.size();
        for(int i=0;i<len;i++)
            for(int j=0;j<len;j++){
                if(grid[i][j]>0){
                    v+=2;
                    for(int k=0;k<4;k++){
                        int nx=i+dx[k];
                        int ny=j+dy[k];
                        int nv=0;
                        if(nx>=0&&nx<len&&ny>=0&&ny<len){
                            nv=grid[nx][ny];
                        }
                        v+=max(grid[i][j]-nv,0);
                    }
                }
            }
        return v;
    }
};
  • 方法2
    计算所有正方体的表面积-被遮挡的面积

892. 三维形体的表面积

标签:turn   int   输入   +=   amp   思路   solution   表示   i++   

原文地址:https://www.cnblogs.com/hunter-w/p/12683286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!