一日あたり892の三次元体表面積ダブル百Golang問題

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
}
公開された38元の記事 ウォンの賞賛0 ビュー1018

おすすめ

転載: blog.csdn.net/Cyan1956/article/details/105087050