LeetCode:892. 三维形体的表面积

892. 三维形体的表面积

题目:

在这里插入图片描述

解题思路:

我们先来理解一下题意:
在这里插入图片描述
[[1,2],[3,4]]就是一个二维数组A。A[i][j]表示每一个以单位正方形为底的空间上正方体的个数。
[[1,2],[3,4]]的意思就是假如我们把底面看作四个单位正方形,1、2、3、4就表示每个正方形上有正方体的个数。如下图,第一个正方形上有一个正方体;第二个正方形上有二个正方体;第三个正方形上有三个正方体;第四个正方形上有四个正方体。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题方法:
在这里插入图片描述
我们可以对这样的一个二位数组进行遍历,因为相邻的面不能算在表面积中,所以解题的方法有俩种:
1、累减法:先将所有的面算出来,不考虑相邻不相邻,例如一个8个正方形,那么一共就有8*6=48个面;然后判断有没有相邻,如果相邻,那么就减去较小高度×2;这样就会把相邻的面去掉,得到最终结果
2、累加法:初始便面积为0,然后判断每一个正方体除去相邻面后剩下的面,最后相加

源码:

//累减法
int surfaceArea(int** grid, int gridSize, int* gridColSize){
    int i,j;
    int area = 0;
    int row = gridSize;
    int col = *gridColSize;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            if (grid[i][j] > 0) 
                area += (grid[i][j] * 4 + 2);
        }
    }
    for(i=0;i<row;i++){
        for(j=0;j<col;j++){
            if(j+1 < col && grid[i][j] >= grid[i][j+1])
                area = area - grid[i][j+1] * 2;
            if(j+1 < col && grid[i][j] < grid[i][j+1])
                area = area - grid[i][j] * 2;
            if(i+1 < gridSize && grid[i][j] >= grid[i+1][j])
                area = area - grid[i+1][j] * 2;
            if(i+1 < gridSize && grid[i][j] < grid[i+1][j])
                area = area - grid[i][j] * 2;
        }
    }
    return area;
}

踩坑点:

1、因为要判断是否相邻,所以会有i,j的邻接值的判断;我的解题方法只判断右侧和下侧,所以最后一列的右侧肯定不用判断,因为最后一列的右侧没有东西了;最后一行的下侧也不用判断,因为最后一行的下侧也没有东西了,所以有了代码中的i,j临界值的判断。
2、代码中的col和row的定义也没有必要,因为总是正方形,col=row=gridSize,所以可以统一用gridSize代替。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值