三次元ボリュームの表面積LeetCode-

件名の説明:

グリッド上のN * N、我々はいくつかのキューブ* 1 * 1を入れました。

各値v =グリッド[i] [j]は、対応するセル(i、j)の上に重ねVキューブを表します。

最終体表面積に戻ってください。

例:

入力:[[2]] 
出力:10
入力:[1,2]、[3,4] 
出力:34
入力:[[1,0]、[0,2 ]] 
出力: 16
入力:[[1,1,1]、[1,0,1]、[1,1,1 ]] 
出力: 32
入力:[[2,2,2]、[2,1,2]、[2,2,2 ]] 
出力: 46

問題解決のアイデア:

質問は、〜を(私は最初のアイデアのタイトルを見て)読んでいません。入力サンプルの表現の意味を説明します。

例1:細胞内の座標(0,0)に2つのキューブを置きます。

例2:細胞内の座標(0,0)にキューブを入れます。セルの2つの立方体の座標(0,1)を置きます。放電3つのキューブ内のセルの座標(1,0)。放電4個のキューブでセル座標(1,1)。

....

次に、実際に、これらのキューブの意味の主題は、被覆部の表面積の他の部分に加えて得られた、この質問を見てください。実施例又は入力サンプル。

実施例1:(0,0)が遮断される2つの面、他の部分(2×6の表面積を有する2つのキューブ、2つのキューブ(他の上方に配置された1)と、この山を有し、 - 2 * 1 => 2つのキューブ、それぞれが6つの面、2面覆われ、各正方形)= 10。

実施例2:10個のキューブの合計、表面26を覆い、他の部分(10 * 6--26 * 1)= 34の​​表面積。

....

もっと徹底的に少しを理解するコードを見てください。また、紙の上に自分のマップを描画するようにしてください。

コード:

ソリューションクラス:
DEFの表面積(セルフ、グリッド:リスト[一覧[INT]]) - > int型:
IF LEN(グリッド)== 0:
リターン0
ブロック= 0#合計何統計キューブ
カバー= 0#统计有多少个面被其他面盖住,在所有的立方体的表面积上减去被盖住的面数×2

以下のための範囲(LEN(グリッド))におけるI:
範囲でJ(LEN(グリッド[I]))のための
IFグリッド[I]、[J]> 0:
ブロック+ =グリッド[I] [J]
表紙+ =グリッド[I]、[J] - 1。
IF I> 0:
表紙+ =分(グリッド[I - 1]〜[J]、グリッド[I] [J])と同じ行番号に、積層された2つのセルを比較します小さな取る立方体の数、
IF J> 0:
表紙+ =分(グリッド[I] [J - 1]、グリッド[I]は[J])#同様
戻りブロック* 6 -カバー* 2

 

おすすめ

転載: www.cnblogs.com/RiverMap/p/12569358.html