【leetcode】892. 三維形體的表面積(surface-area-of-3d-shapes)(數學)[簡單]

鏈接

https://leetcode-cn.com/problems/surface-area-of-3d-shapes/

耗時

解題:18 min
題解:16 min

題意

給定一個在 NNN*N 的網格,網格上放置有一些單位立方體(1111 * 1 * 1)。網格上的數字 grid[i][j] 代表當前的格子(i,j)上有 grid[i][j] 個立方體。問這些立方體所組成的形體的表面積?

思路

如果沒有遮擋,每個格子上的立方體表面積是 4grid[i][j]+24*grid[i][j]+2

先計算無遮擋情況下每個格子上立方體的表面積,再減去遮擋面積,即可得出最終表面積。

遮擋面積具體實現:檢查當前格子 上、下、左、右 四個方位是否出網格,如果沒有則減去遮擋面積(min(grid[i][j],grid[x][y])min(grid[i][j], grid[x][y]))。注意當網格上沒有立方體時,按照計算公式仍會得出 2 的表面積,所以需要特判一下直接 continue

AC代碼

class Solution {
public:
    bool check(int x, int y, int n) {
        if((x >= 0 && x < n) && (y >= 0 && y < n)) 
            return true;
        return false;
    }
    int surfaceArea(vector<vector<int>>& grid) {
        int n = grid.size();
        int ans = 0;
        int dir[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                if(grid[i][j] == 0) continue;
                ans += 4*grid[i][j]+2;
                for(int d = 0; d < 4; ++d) {
                    int x = i+dir[d][0];
                    int y = j+dir[d][1];
                    if(check(x, y, n)) {
                        ans -= min(grid[i][j], grid[x][y]);    
                    }    
                } 
            }
        }
        return ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章