LeetCode 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;
}
原文地址:https://www.cnblogs.com/woju/p/12571173.html