892. 三维形体的表面积

难度简单90

N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。

每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

请你返回最终形体的表面积。

示例 1:

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

示例 2:

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

示例 3:

1
2
输入:[[1,0],[0,2]]
输出:16

示例 4:

1
2
输入:[[1,1,1],[1,0,1],[1,1,1]]
输出:32

示例 5:

1
2
输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:46

提示:

  • 1 <= N <= 50
  • 0 <= grid[i][j] <= 50

一道模拟题,题目意思很难懂

第一个示例的意思是 0,0这个位置有一个高度为2的立方体;

第二个示例的意思是 0,0 高度为1;0,1 高度为2…………

主要解法是找到一个求解表面积的公式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int N=grid.size();
int result=0;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(grid[i][j]>0){
result+=2+4*grid[i][j];
}
if(i>0){
if(grid[i-1][j]>0){
result-=min(grid[i-1][j],grid[i][j])*2;
}
}
if(j>0){
if(grid[i][j-1]>0){
result-=min(grid[i][j-1],grid[i][j])*2;
}
}
}
}
return result;
}
};