力扣892题,跟着解析看懂了,记录一下,以后忘了来翻翻
原题链接
题目理解起来还是很简单的,很多立方体堆叠,最后看暴露出来的表面积是多少。题中输入的数据有个特点,那就是俯视图一定是个正方形,所以得到grid的长度也就是它的宽度。官方题解中提供了加法和减法两种情况,我感觉减法用起来很简单,也方便理解。就是先算出有多少正方体,再算出有多少接触面,每个立方体六个面,一个接触面是两个面。
正方体数就是遍历数组,每个位置的值相加。接触面按上接触面和左接触面来算。例如左边,每次比较现在位置和左边立方体数量的大小,按小的那个来算接触面,上面也是这个。
public class Main {
public static void main(String[] args) {
int arr[][] = { { 1, 2 }, { 3, 4 } };
System.out.println(surfaceArea(arr));
}
public static int surfaceArea(int[][] grid) {
int N = grid.length;
int faces = 0;
int cubes = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < 0; j++) {
cubes += grid[i][j];
if (grid[i][j] > 0)
faces += grid[i][j] - 1;
if (i > 0)
faces += Math.min(grid[i - 1][j], grid[i][j]);
if (j > 0)
faces += Math.min(grid[i][j - 1], grid[i][j]);
}
}
return cubes * 6 - faces * 2;
}
}
看不懂吗?看不懂就对了,你还是去看官方详解吧
官方详解