説明タイトル
N * Nグリッド上では、我々はいくつかのキューブに* 1 * 1 1を置きました。
各値v =グリッド[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]]
出力:46
ソリューション:暴力的なソリューション
実施例2において、例えば、
まず、カラムは柱を確認するために、各ピラーがで構成されている:キューブ二底面(上面/下面)+すべての4つの側面の表面積が寄与しています
その後、列思いやり一緒にした後、我々は失う表面積、一般的に二つの高柱2の最小値に適合し2列の表面積に結合する必要があります*
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int n = grid.size(), area = 0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
int hi = grid[i][j];
if(hi>0)
{
area += hi*4+2;
area -= i>0?min(hi, grid[i-1][j])*2:0;
area -= j>0?min(hi, grid[i][j-1]) *2:0;
}
}
}
return area;
}
};