LeetCode 892 - 三次元の体表面積

説明タイトル
N * Nグリッド上では、我々はいくつかのキューブに* 1 * 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

ソリューション:暴力的なソリューション

ここに画像を挿入説明
実施例2において、例えば、

まず、カラムは柱を確認するために、各ピラーがで構成されている:キューブ二底面(上面/下面)+すべての4つの側面の表面積が寄与しています

その後、列思いやり一緒にした後、我々は失う表面積、一般的に二つの高柱2の最小値に適合し2列の表面積に結合する必要があります*

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        int n = grid.size(), area = 0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                int hi = grid[i][j];
                if(hi>0)
                {
                    area += hi*4+2;
                    area -= i>0?min(hi, grid[i-1][j])*2:0;
                    area -= j>0?min(hi, grid[i][j-1]) *2:0;
                }
            }
        }
        return area;
    }
};
公開された152元の記事 ウォン称賛22 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_38204302/article/details/105104634