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

猜你喜欢

转载自blog.csdn.net/m0_37889928/article/details/82840953