版权声明:本文为博主原创文章,未经博主允许不得转载。 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