[LeetCode] Problem 892 - Surface Area of 3D Shapes

On a N * N grid, we place some 1 * 1 * 1 cubes.

Each value v = grid[i][j] represents a tower of v cubes placed on top of grid cell (i, j).

Return the total surface area of the resulting shapes.

Example

No.1

Input: [[2]]

Output: 10

No.2

Input: [[1,2],[3,4]]

Output: 34

No.3

Input: [[1,0],[0,2]]

Output: 16

No.4

Input: [[1,1,1],[1,0,1],[1,1,1]]

Output: 32

No.5

Input: [[2,2,2],[2,1,2],[2,2,2]]

Output: 46

Note

  • 1 <= N <= 50
  • 0 <= grid[i][j] <= 50

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public int surfaceArea(int[][] grid) {
int result = 0;

for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid.length; j++) {
if (grid[i][j] == 0)
continue;

result += 4 * grid[i][j] + 2;

if (j > 0 && grid[i][j - 1] > 0)
result -= Math.min(grid[i][j], grid[i][j - 1]) * 2;

if (i > 0 && grid[i - 1][j] > 0)
result -= Math.min(grid[i][j], grid[i - 1][j]) * 2;
}
}

return result;
}