Leetcode] [三次元の体表面積(1日一つの質問)

トピックリンク:三次元の体表面積


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

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

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


ソリューション:私は、この問題が読むためにタイトルを取ることであると感じています。

図1に示すように、各グリッド上のキューブがある場合。キューブがある場合は、計算は、4つの立方体の円が数+ 2 *(2上部及び底部の両方)対向しています

図2は、立方体の正面、マイナス任意のオーバラップ領域(ある、2つの重複する面が重なるように、隠されている数* 2)かどうかを検討します

図3に示すように、左キューブ、マイナス任意のオーバラップ領域があるかどうかを検討する(すなわち、2つの重複する面が隠されているので、重複数* 2)

彼は例最初の2つの例を描きました。ソウル手描き、5555)

 

 

 

 

 

 


コード:

1  クラスソリューション{
 2  公共3      INT表面積(ベクトル<ベクトル< INT >>&グリッド){
 4          int型の行= grid.size()。
5          INT COL =グリッド[ 0 ] .size()。
6          INT ANS = 0 7          のためのINT iが= 0 ; I <行; I ++ ){
 8              のためのINT J = 0 ; J <COL; J ++ ){
 9                  もし(グリッド[I] [J]){
 10                     + = ANS [I]、[J] *グリッド。4 + 2 ;   // アップスタック
 11                      // 立方体の正面
12は、                     IFは、(I> 0 ){
 13は                          ANS - =分(グリッド[I- 1 ] [J]グリッド[I] [J])* 2 ;
 14                      }
 15                      // 左キューブ
16                      IF(J> 0 ){
 17                          ANS - =分(グリッド[I]、[J- 1 ]、グリッド[I] [J] )* 2 ;
 18                      }
 19                  }
 20             }
 21          }
 22          リターン年。
23      }
 24 }。

 

おすすめ

転載: www.cnblogs.com/Asumi/p/12571667.html