本文最后更新于 1784 天前,其中的信息可能已经有所发展或是发生改变。
题目描述
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。
每个值 v = grid[i][j] 表示 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]]
输出:46
提示:
1 <= N <= 50
0 <= grid[i][j] <= 50
思路
- 差不多一年没刷题了,之前看到公司大佬今年的个人计划,LeetCode 200道。想起大三每周参加学校的算法训练,学习算法,参加比赛,还有当时纪超说的“算法才是王道”,深有感触,于是在个人计划里加上了算法刷题。
- 太久没弄了,都忘了C++的那些常用函数,连头文件都不知道导什么,再加上Dev C++这个IDE调试起来实在痛苦,于是打算转战JAVA。
- 这道题分类是简单,但是当我读题时却蒙了,完全读不懂,最终是看看了评论才明白是怎么回事。真的是解题5分钟,读题两小时。
- 挺简单的,就是求个表面积而已。
代码
public int surfaceArea(int[][] grid) {
int sum=0;
int[][][] arr=new int[51][51][51];
// 赋初值
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid.length;j++){
for(int k=0;k<grid[i][j];k++){
arr[i][j][k]=1;
}
}
}
// 开始计算面积
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid.length;j++){
if(arr[i][j][0]!=0)sum+=2;
for(int k=0;arr[i][j][k]!=0;k++){
if(j==0)sum++;
if(j>0&&arr[i][j-1][k]==0)sum++;
if(j<50&&arr[i][j+1][k]==0)sum++;
if(i==0)sum++;
if(i>0&&arr[i-1][j][k]==0)sum++;
if(i<50&&arr[i+1][j][k]==0)sum++;
}
}
}
return sum;
}