鏈接
https://leetcode-cn.com/problems/surface-area-of-3d-shapes/
耗時
解題:18 min
題解:16 min
題意
給定一個在 的網格,網格上放置有一些單位立方體()。網格上的數字 grid[i][j] 代表當前的格子(i,j)上有 grid[i][j] 個立方體。問這些立方體所組成的形體的表面積?
思路
如果沒有遮擋,每個格子上的立方體表面積是 。
先計算無遮擋情況下每個格子上立方體的表面積,再減去遮擋面積,即可得出最終表面積。
遮擋面積具體實現:檢查當前格子 上、下、左、右 四個方位是否出網格,如果沒有則減去遮擋面積()。注意當網格上沒有立方體時,按照計算公式仍會得出 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;
}
};