题目描述 : 在 N *M 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。
请你返回最终形体的表面积。
示例 1:
输入:[[2]] 输出:10
示例 2:
输入:[[1,2],[3,4]] 输出:34
示例 3:
输入:[[1, 2, 3], [4, 5, 6]] 输出:60
解题思路:
- 三维形体的表面积=每个位置上组合立方体的表面积-每个位置上组合立方体的邻接面积。
- 用两个数记录每个位置上组合立方体的表面积和每个位置上组合立方体的邻接面积。
- 组合立方体的表面积求和公式为立方体个数 * 4 + 2;邻接面积则为邻接面个数 * 2。
- 遍历二维数组,当值不为0时记录组合立方体的表面积,并且记录 i 行与 i + 1 行的邻接面积, j列与 j + 1 列的邻接面积。
- 返回三维形体的表面积
public class Main {
public static void main(String[] args) {
int[][] grid = {{1,2,3}, {4,5,6}};
System.out.println(surfaceArea(grid));
}
public static int surfaceArea(int[][] grid) {
int area1 = 0;
int area2 = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] != 0) area1 += grid[i][j] * 4 + 2;
if (i != grid.length - 1) {
area2 += Math.min(grid[i][j], grid[i + 1][j]) * 2;
}
if (j != grid[0].length - 1) {
area2 += Math.min(grid[i][j], grid[i][j + 1]) * 2;
}
}
}
return area1 - area2;
}
}