classSolution{publicintsurfaceArea(int[][] grid){int L = grid.length;int W = grid[0].length;int area =0;//只有一个位置if(L==1&& W==1)return grid[0][0]*4+2;//一排或一列if(L==1){for(int i=0;i<W;i++){if(grid[0][i]!=0) area +=2;if(i==0){
area += grid[0][i]*3;
area += Math.abs(grid[0][i]-grid[0][i+1]);}elseif(i==W-1){
area += grid[0][i]*3;}else{
area += grid[0][i]*2;
area += Math.abs(grid[0][i]-grid[0][i+1]);}}return area;}if(W==1){for(int i=0;i<L;i++){if(grid[i][0]!=0) area +=2;if(i==0){
area += grid[i][0]*3;
area += Math.abs(grid[i][0]-grid[i+1][0]);}elseif(i==L-1){
area += grid[i][0]*3;}else{
area += grid[i][0]*2;
area += Math.abs(grid[i][0]-grid[i+1][0]);}}return area;}//矩形for(int i=0;i<L;i++){for(int j=0;j<W;j++){if(grid[i][j]!=0) area +=2;if(i==0){if(j==0){
area += grid[i][j]*2;
area += Math.abs(grid[i][j]-grid[i][j+1])+Math.abs(grid[i][j]-grid[i+1][j]);}elseif(j==W-1){
area += grid[i][j]*2;
area += Math.abs(grid[i][j]-grid[i+1][j]);}else{
area += grid[i][j];
area += Math.abs(grid[i][j]-grid[i][j+1])+Math.abs(grid[i][j]-grid[i+1][j]);}}elseif(i==L-1){if(j==0){
area += grid[i][j]*2;
area += Math.abs(grid[i][j]-grid[i][j+1]);}elseif(j==W-1){
area += grid[i][j]*2;}else{
area += grid[i][j];
area += Math.abs(grid[i][j]-grid[i][j+1]);}}else{if(j==0){
area += grid[i][j];
area += Math.abs(grid[i][j]-grid[i][j+1])+Math.abs(grid[i][j]-grid[i+1][j]);}elseif(j==W-1){
area += grid[i][j];
area += Math.abs(grid[i][j]-grid[i+1][j]);}else{
area += Math.abs(grid[i][j]-grid[i][j+1])+Math.abs(grid[i][j]-grid[i+1][j]);}}}}return area;}}
题解做法:算出所有的表面积再减去贴住的表面积。
classSolution{publicintsurfaceArea(int[][] grid){int n = grid.length, area =0;for(int i =0; i < n; i++){for(int j =0; j < n; j++){// 先把grid[i][j]赋值给level,省掉了bound check,可以略微略微略微优化一下耗时。。。int level = grid[i][j];if(level >0){// 一个柱体中:2个底面 + 所有的正方体都贡献了4个侧表面积
area +=(level <<2)+2;// 减掉 i 与 i-1 相贴的两份表面积
area -= i >0? Math.min(level, grid[i -1][j])<<1:0;// 减掉 j 与 j-1 相贴的两份表面积
area -= j >0? Math.min(level, grid[i][j -1])<<1:0;}}}return area;}}
作者:sweetiee
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes/solution/shi-li-you-tu-you-zhen-xiang-jiang-jie-yi-kan-jiu-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。