首页 > 其他 > 详细

三维形体的表面积

时间:2020-03-25 21:16:37      阅读:61      评论:0      收藏:0      [点我收藏+]

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

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

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

 

示例 1:

输入:[[2]] // 表示在grid[0][0]的位置有2个正方体
输出:10
示例 2:

输入:[[1,2],[3,4]] // 表示在grid[0][0]的位置有1个正方体,在grid[0][1]的位置有2个正方体,在grid[1][0]的位置有3个正方体在grid[1][1]的位置有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

 

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        int num = 0;
        int numContact = 0;
        for(int i = 0; i < grid.size(); i++){
            for(int j = 0; j < grid[i].size(); j++){
                num += grid[i][j];
                if(grid[i][j] != 0) numContact += grid[i][j]-1;
                if(i != 0){
                    numContact += min(grid[i-1][j],grid[i][j]);
                }
                if(j != 0){
                    numContact += min(grid[i][j-1], grid[i][j]);
                }
            }
        }

        return num*6 - numContact*2;
    }
};

解题思路:每个正方体的面有6个,每接触1下,就会消耗2个面。因此只要计算出有多少个正方体,以及有多少个面有接触就好了。

其中接触面有两种情况:(1)同一个位置堆叠起来的正方体,其消耗的面个数为grid[i][j]-1(2)与左边或上边的立方体接触,消耗的面个数为两者的立方体个数最小值。

 

三维形体的表面积

原文:https://www.cnblogs.com/olajennings/p/12569037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!