zoukankan      html  css  js  c++  java
  • 892. 三维形体的表面积

    描述

    在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体。
    每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
    请你返回最终形体的表面积。

    示例 1:
    输入:[[2]]
    输出:10

    示例 2:
    输入:[[1,2],[3,4]]
    输出:34

    思路

    本质上是到数学题,有两种方法解决

    • 方法1
      计算每个正方体贡献的表面积=2+4个方向上高与相邻立方体的高的差值
    class Solution {
    public:
        int surfaceArea(vector<vector<int>>& grid) {
            int dx[]={1,0,-1,0};
            int dy[]={0,-1,0,1};
            int v=0,len=grid.size();
            for(int i=0;i<len;i++)
                for(int j=0;j<len;j++){
                    if(grid[i][j]>0){
                        v+=2;
                        for(int k=0;k<4;k++){
                            int nx=i+dx[k];
                            int ny=j+dy[k];
                            int nv=0;
                            if(nx>=0&&nx<len&&ny>=0&&ny<len){
                                nv=grid[nx][ny];
                            }
                            v+=max(grid[i][j]-nv,0);
                        }
                    }
                }
            return v;
        }
    };
    
    • 方法2
      计算所有正方体的表面积-被遮挡的面积
  • 相关阅读:
    Redis篇
    MySql篇
    Tomcat篇
    JDK篇
    冒泡排序(算法源码)
    堆排序(源码)
    快速排序(递归及非递归算法源码)
    MongoDB 复制
    MongoDB appendix
    服务器端脚本
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12683286.html
Copyright © 2011-2022 走看看