1. 程式人生 > >Surface Area of 3D Shapes

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 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;
    }
}