892三次元体表面積
グリッド上のN * N、我々はいくつかのキューブ* 1 * 1を入れました。
各値v =グリッド[I] [jが 】 対応するセル(i、j)の上に重ねVキューブを表します。
最終体表面積に戻ってください。
実施例1:
入力:[1,2]、[3,4]
出力:34
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/surface-area-of-3d-shapes
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
方法:被覆された表面の数を保存するメモリキューブの可変総数、別の変数を使用して、反復します。
class Solution {
public int surfaceArea(int[][] grid) {
int block=0;//统计共有多少立方体
int count=0;//统计共有多少面被遮盖
for(int i=0;i<grid.length;i++)
{
for(int j=0;j<grid[i].length;j++)
{
block+=grid[i][j];//累加每个坐标上的立方体个数
if(grid[i][j]!=0)
{
count+=grid[i][j]-1;//统计上下被遮盖的面数,即上下叠放造成的遮盖
}
if(i>0)
{
//统计前后叠放造成的遮盖的面数,每一行只需要统计前面被遮盖的面数,因为当前行后面被遮盖的面数被后一行前面被遮盖的面数包含了,只需要统计一次
count+=Math.min(grid[i][j],grid[i-1][j]);
}
if(j>0)
{
count+=Math.min(grid[i][j],grid[i][j-1]);//统计左右叠放造成的遮盖面数
}
}
}
return block*6-count*2;
}
}