力扣 892. 三维形体的表面积 C++

在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。

每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

请你返回最终形体的表面积。

示例 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 <= grid[i][j] <= 50

C++

class Solution {
public:
    int surfaceArea(vector<vector<int>>& grid) {
        int n = grid.size();
        int res = 0;
        int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(grid[i][j] > 0) res += 2;
                for(int k = 0; k < 4; k++){
                    int i1 = i + dir[k][0]; 
                    int j1 = j + dir[k][1];
                    int k1 = 0;
                    //判断新结点是否合法
                    if(0 <= i1 && i1 < n && 0 <= j1 && j1 < n){
                        k1 = grid[i1][j1];
                    }
                    res += max(grid[i][j] - k1, 0);
                }
            }
        }
        return res;
    }
};

参考: 力扣官方题解三维形体的表面积

©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页