892三次元体表面積
グリッド上のN * N、我々はいくつかのキューブ* 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
ヒント:
1 <= N <= 50
0 <=グリッド[I] [J] <= 50
思考
各位置のカットバー、4N + 2の表面積のビンのそれぞれを分離する第一、。そして、唯一のダブルカウントを避けるために、左上を検討ビン、間の重なる領域を差し引きます。分のリピートエリア(N1、N2)* 2。
私の答え
func surfaceArea(grid [][]int) int {
sf:=0
for i:=0;i<len(grid);i++{
for j:=0;j<len(grid[0]);j++{
if grid[i][j]!=0{
sf+=grid[i][j]*4+2
if i>0{
sf-=min(grid[i][j],grid[i-1][j])*2
}
if j>0{
sf-=min(grid[i][j],grid[i][j-1])*2
}
}
}
}
return sf
}
func min(x,y int) int {
if x<y{
return x
}
return y
}