LeetCode(easy)-892、Surface Area of 3D Shapes

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/f823154/article/details/82954424

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 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
题目:
在N * N网格上,我们放置一些1 * 1 * 1的立方体。
每个值v = grid [i] [j]表示放置在网格单元(i,j)顶部的立方体塔。
返回结果形状的总表面积。
解法一:

//总面试是个数*6
//同一位置,从2层以上开始,每升高一层,减少2个面
//左右位置,每相邻一个,减少2个面
//前后位置,每相邻一个,减少2个面
int surfaceArea(int** grid, int gridRowSize, int *gridColSizes) {
    int area = 0;
	for(int i=0;i<gridRowSize;i++){
		for(int j=0;j<gridRowSize;j++){
			area += grid[i][j]*6;
			if(grid[i][j]>1){
				area -= (grid[i][j]-1)*2;
			}
			if(i>0){
				if(grid[i][j]>=grid[i-1][j]){
					area -= grid[i-1][j]*2;
				}
				else
				    area -= grid[i][j]*2;
			}
			if(j>0){
				if(grid[i][j]>=grid[i][j-1]){
					area -= grid[i][j-1]*2;
				}
				else
				    area -= grid[i][j]*2;
			}
		}
	}
	return area;
}

Runtime: 4 ms
解法二:

class Solution(object):
    def surfaceArea(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        area = 0
        for i in range(len(grid)):
            for j in range(len(grid)):
                area += grid[i][j] * 6
                if (grid[i][j]>1): area -= (grid[i][j]-1)*2
                if i>0: area -= min(grid[i][j], grid[i-1][j]) * 2
                if j>0: area -= min(grid[i][j], grid[i][j-1]) * 2
        return area

Runtime: 40 ms

猜你喜欢

转载自blog.csdn.net/f823154/article/details/82954424