Leetcode.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

思考

最初のアイデアは簡単としてマークされているこのタイトルを追加することは比較的簡単です、4,5例(3次元図、左側面図と和の平面図の本体は、記事「中空」状態になるために2を掛けていることを前提とし正確に)下の面積を計算することはできません。だから、他の方法を考える:あなたは左から右へ、この三次元の体の上を歩くことを想像して、上から下へはそれが体の表面積で旅しました。次のことを達成するために:

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        int N=grid.size();
        if(N==0)
            return 0;
        int ispan=0, jspan=0;
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                if(j==0)
                    jspan+=grid[i][j];
                else
                    jspan+=abs(grid[i][j]-grid[i][j-1]);
                if(grid[i][j] != 0)
                    jspan+=1;
                if(j == N-1)
                    jspan+=grid[i][j];

                if(i == 0)
                    ispan+=grid[i][j];
                else
                    ispan+=abs(grid[i][j]-grid[i-1][j]);
                if(grid[i][j] != 0)
                    ispan+=1;//加了两次,正好对应上面和下面
                if(i == N-1)
                    ispan+=grid[i][j];
            }
        }

        return ispan+jspan;
    }
};

 

公開された18元の記事 ウォンの賞賛0 ビュー775

おすすめ

転載: blog.csdn.net/afiguresomething/article/details/105091619