展示产品的网站 个人备案还是企业,秦皇岛网站制作专家,重庆网站推广计划,泰安网站建设渠道三维形体的表面积 在 N * N 的网格上#xff0c;我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 例子#xff1a; 输入#xff1a;[[2,1],[1,0]]输出#xff1a;18
解题思路#xff1…三维形体的表面积 在 N * N 的网格上我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 例子 输入[[2,1],[1,0]]输出18
解题思路 刚碰到这道题时并没有特别思路经过作图和一些启发我们可以用累加重叠算出单独的表面积求和在减去覆盖的面积。但是太过繁琐。直到一幅水从上到下从左到右流过表面的图像出现在脑海有了新的启发。 我们可以用2n个机器人分别两队从左到右每行一个从上到下每列一个走过每个网格顶部加上所有相邻顶部的落差这便是所有的侧表面积同时判断此网格不为0不为0便多加2这是顶底表面积。这样便没有所谓的重叠面积要减。
算法步骤
每行每列记录相邻网格落差记录侧面积。同时判断该网格是否非0记录顶底面积。每次计算到行或列最后一个元素后加上高度因为没有下一个网格这是他的外围侧面积。
数据分析 Int a,b,c:分别记录行列侧面积和顶底面积
复杂度分析 空间复杂度O(1) 时间复杂度ON^2
图解过程
#include stdio.h
#include stdlib.h
#define L 2
int grid[L][L];
int sum(int l){int a0,b0,c0;int aa0,bb0; for (int i0;il;i){aa0;bb0;for(int j0;jl;j){aabs(grid[i][j]-aa);aagrid[i][j];babs(grid[j][i]-bb);bbgrid[j][i];if (grid[i][j]!0) c2;}agrid[i][l-1];bgrid[l-1][i];}return abc;
}int main(){for (int i0;iL;i){for(int j0;jL;j){scanf(%d,grid[i][j]);}}printf(网格表面积为%d,sum(L));
}