892. 三维形体的表面积
Posted hunter-w
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了892. 三维形体的表面积相关的知识,希望对你有一定的参考价值。
描述
在?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. 三维形体的表面积的主要内容,如果未能解决你的问题,请参考以下文章
数据结构与算法之深入解析“三维形体的表面积”的求解思路与算法示例