91 三次元の体表面積
トピックリンク
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/surface-area-of-3d-shapes
タイトル説明
グリッド上の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
重いと難しいです
- タイトルを読んでください。
- 接着面を考慮。
トピック分析
- 問題を読んで、分析例1:(0,0)の位置は、2つのキューブを有するので、2 * 4 + 2 = 10の表面積;
- 読み取りの問題、分析例2:キューブ(0,0)の位置は、ある2個の立方体(0,1)の位置と、三つの(1,0)の位置にあります共に位置に4個の立方体(1,1)と一緒にキューブは、オンになっています。
- 各位置のための立方体の表面積は2 +4底面側、2つのキューブ上の積載位置である場合:2 + 8下面側、
- リリース後キューブ隣接する位置には、表面積が* 2スティック一緒に顔を引く必要があり、各位置のための接合面が存在することになります。
/ ** * @param {数[] []}グリッド * @return {数} * / VAR表面積=関数(グリッド){ IF(グリッド=== [[0]])戻り0; N = grid.lengthてみましょう。 聞かせてRES = 0; ため(LET I = 0、I <N; I ++){ ため(J = 0せ; J <nであり、j ++){ RES + =グリッド[I]、[J]> 0?(4 *グリッド[I] [J] +2):0。 //减掉I与I + 1相贴的两份表面积 RES - =(I <N-1 &&グリッド[I + 1] [j]> 0)?2 * Math.min(グリッド[I]、[J]、グリッド[I + 1] [J]):0。 //减掉J与J + 1相贴的两份表面积 RES - =(J <N-1 &&グリッド[I]、[J + 1]> 0)?2 * Math.min(グリッド[I]、[J]、グリッド[I]、[J + 1]):0。 } } RESを返します。 }。