三次元体問題の表面積を磨く54〜

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. タイトルを読んでください。
  2. 接着面を考慮。

トピック分析

  1. 問題を読んで、分析例1:(0,0)の位置は、2つのキューブを有するので、2 * 4 + 2 = 10の表面積;
  2. 読み取りの問題、分析例2:キューブ(0,0)の位置は、ある2個の立方体(0,1)の位置と、三つの(1,0)の位置にあります共に位置に4個の立方体(1,1)と一緒にキューブは、オンになっています。
  3. 各位置のための立方体の表面積は2 +4底面側、2つのキューブ上の積載位置である場合:2 + 8下面側、
  4. リリース後キューブ隣接する位置には、表面積が* 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を返します。
}。

  

おすすめ

転載: www.cnblogs.com/liu-xin1995/p/12563613.html