欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Surface Area of 3D Shapes

程序员文章站 2022-03-30 13:50:01
...

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