当前位置: 首页 > 后端技术 > Python

力扣-0892.3D形状的表面积[Python]

时间:2023-03-26 15:24:49 Python

LeetCode0892.3D形状的表面积[易][Python][数学]问题LeetCode在一个N*N的网格上,我们放置一些1*1*1的立方体.每个值v=grid[i][j]表示放置在网格单元格(i,j)顶部的v个立方体塔。返回结果形状的总表面积。示例1:输入:[[2]]输出:10例2:输入:[[1,2],[3,4]]输出:34例3:输入:[[1,0],[0,2]]输出:16例4:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:32例5:输入:[[2,2,2],[2,1,2]],[2,2,2]]Output:46Note:1<=N<=500<=grid[i][j]<=50问题是在NN个网格上,我们放置了一些11*1的立方体。每个值v=gridi表示v个立方体堆叠在相应的单元格(i,j)上。请返回最终形状的表面积。示例1:输入:[[2]]输出:10示例2:输入:[[1,2],[3,4]]输出:34示例3:输入:[[1,0],[0,2]]输出:16示例4:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:32示例5:输入:[[2,2,2],[2,1,2],[2,2,2]]Output:46Tips:1<=N<=500<=grid[i][j]<=50从反面思考数学,先统计有多少重叠的面,最后减去重叠的面。堆叠的v立方体有v-1个接触面,分为两种情况:1.当前列与上面的列接触2.当前列与左边的列接触。时间复杂度:O(n^2)空间复杂度:O(1)Python3代码类解法:defsurfaceArea(self,grid:List[List[int]])->int:n=len(grid)cubes,faces=0,0foriinrange(n):forjinrange(n):cubes+=grid[i][j]ifgrid[i][j]>0:#堆叠的v个立方体有v-1个接触面faces+=grid[i][j]-1ifi>0:#当前列与上列的接触面数faces+=min(grid[i-1][j],grid[i][j])ifj>0:#当前列与上列左列faces的接触面数+=min(grid[i][j-1],grid[i][j])return6*立方体-2*面GitHublinkPython