美文网首页
892. 三维形体的表面积

892. 三维形体的表面积

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-04-27 20:44 被阅读0次

    在 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

    思路:

    一开始本来用三视图的方法入手,后面发现空心情况很复杂,不如先叠加自身全部的表面积,再扣掉重复面积这种方法简单。自身面积的公式也很容易想,高度*4+2就行了。扣掉前面和左边部分的重复面积就行了。实现代码如下所示。

    class Solution {
    public:
        int surfaceArea(vector<vector<int>>& grid) {
            int rows,cols;
            if(!grid.size() || !grid[0].size())
            {
                return 0;
            }
            rows=grid.size();
            cols=grid[0].size();
            int res=0;
     
            for(int i=0;i<rows;i++)
            {
                for(int j=0;j<cols;j++)
                {
                    if(grid[i][j])
                    {
                        if(i==0&&j==0)
                        {
                            res+=grid[i][j]*4+2;
                        }
                        else if(i==0)
                        {
                            res+=grid[i][j]*4+2-2*min(grid[i][j],grid[i][j-1]);
                        }
                        else if(j==0)
                        {
                            res+=grid[i][j]*4+2-2*min(grid[i][j],grid[i-1][j]);
                        }
                        else
                        {
                            res+=grid[i][j]*4+2-2*min(grid[i][j],grid[i-1][j])-2*min(grid[i][j],grid[i][j-1]);  
                        }
                    }
    
                }
            }
            return res;
    
        }
    };
    

    相关文章

      网友评论

          本文标题:892. 三维形体的表面积

          本文链接:https://www.haomeiwen.com/subject/skrlnqtx.html