• 计算几何-892. 三维形体的表面积


    2020-03-25 15:47:14

    问题描述:

    在 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

    问题求解:

    直接去运算每行每列的最大值,然后计算是不对的,因为可能会存在中间有空洞的情况,导致表面积计算减少。

    正确的计算方式是每个柱体进行单独计算,并且逐行逐列的减去重复的部分。

    时间复杂度:O(n ^ 2)

        public int surfaceArea(int[][] grid) {
            int res = 0;
            int n = grid.length;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (grid[i][j] != 0) res += grid[i][j] * 4 + 2;
                    if (i > 0) res -= Math.min(grid[i - 1][j], grid[i][j]) * 2;
                    if (j > 0) res -= Math.min(grid[i][j - 1], grid[i][j]) * 2;
                }
            }
            return res;
        }
    

      

  • 相关阅读:
    html集合
    pyautocad
    CAD 批量提取点坐标,实现坐标的快速提取
    CAD
    python模块
    set,get,setter
    1 Http的表皮
    (6)小项目------完善增删改查的操作
    SSM学习笔记(6)---拦截器
    SSM学习笔记(5)-CGLIB动态代理
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12566720.html
Copyright © 2020-2023  润新知