三维形体的表面积(3.25leetcode每日打卡)

在 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
 
思路:因为是三维图形,所以同三个循环,分别表示x,y,z轴。第三个循环中,发现k>0说明z方向有重叠,减2,如果发现上一组的z大于当前的k说明也有重叠。
 1 int surfaceArea(int** grid, int gridSize, int* gridColSize)
 2 {
 3     int i,j,k,sum = 0;
 4     for(i = 0; i < gridSize; i++)
 5     {
 6         for(j = 0; j < gridColSize[i]; j++)
 7         {
 8             for(k = 0; k < grid[i][j]; k++)  //从下往上累计
 9             {
10                 sum += 6;
11                 //上下相邻
12                 if(k > 0)
13                 {
14                     sum -=2;
15                 }
16                 //前面相邻
17                 if(i>0 && grid[i-1][j] > k)
18                 {
19                     sum -= 2;
20                 }
21                 //左面相邻
22                 if(j>0 && grid[i][j-1] > k)
23                 {
24                     sum -= 2;
25                 }
26 
27             }
28         }
29     }
30     return sum;
31 }
 

猜你喜欢

转载自www.cnblogs.com/ZhengLijie/p/12564469.html