892. 三维形体的表面积
难度简单
在 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
该题题目我看了好久都没有看明白,可能是理解能力不太好吧,哈哈哈,言归正传,经过在评论区一顿海淘,对题目有了一定的的理解,可以当作输入的值为一个矩阵,每一个元素对应了每一个位置上,小方块的个数,下面我把第一个示例的模型做了一下,有些粗糙。。
接下来的的示例虽然比这个复杂一些,但大差不差就是那么个意思。
思路:利用遍历,将整体化小,一块一块的加,以最前和最左为坐标轴,依次检查,利用三重循环,第一重第二重是二维数组的行列,第三重是每一落小方块的个数,然后加上条件,判断下方,左方,和前方,代码实现如下。
int surfaceArea(int** grid, int gridSize, int* gridColSize){ int i,j,k,sum=0; for(i=0;i<gridSize;i++){ for(j=0;j<*gridColSize;j++){ for(k=0;k<grid[i][j];k++){ sum+=6; if(k>0){ sum-=2; } if(i>0&&k<grid[i-1][j]){ sum-=2; } if(j>0&&k<grid[i][j-1]){ sum-=2; } } } } return sum; }