Surface Area of 3D Shapes
阿新 • • 發佈:2018-12-25
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 1:
Input: [[2]] Output: 10
Example 2:
Input: [[1,2],[3,4]] Output: 34
Example 3:
Input: [[1,0],[0,2]] Output: 16
Example 4:
Input: [[1,1,1],[1,0,1],[1,1,1]] Output: 32
Example 5:
Input: [[2,2,2],[2,1,2],[2,2,2]] Output: 46
Note:
1 <= N <= 50
0 <= grid[i][j] <= 50
題目理解:
用二維陣列表示一個三維圖形,計算這個三維圖形的表面積
解題思路:
計算每一個(x,y)座標上小方塊的表面積,如果這個小方塊的上面或者左面有小方塊,那麼就減去遮擋的部分
程式碼如下:
class Solution { public int surfaceArea(int[][] grid) { int res = 0; int row = grid.length; if(row == 0) return 0; int col = grid[0].length; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(grid[i][j] == 0) continue; res += 4 * grid[i][j] + 2; if(i > 0) { res -= Math.min(grid[i][j], grid[i - 1][j]) * 2; } if(j > 0) { res -= Math.min(grid[i][j], grid[i][j - 1]) * 2; } } } return res; } }