892. Surface Area of 3D Shapes (Easy)

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

On a N * N grid, we place some 1 * 1 * 1 cubes.

Each value v = grid[i][j] represents a tower of v cubes placed on top of grid cell (i, j).

Return the total surface area of the resulting shapes.

 

Example 1:

Input: [[2]]
Output: 10

Example 2:

Input: [[1,2],[3,4]]
Output: 34

Example 3:

Input: [[1,0],[0,2]]
Output: 16

Example 4:

Input: [[1,1,1],[1,0,1],[1,1,1]]
Output: 32

Example 5:

Input: [[2,2,2],[2,1,2],[2,2,2]]
Output: 46

 

Note:

  • 1 <= N <= 50
  • 0 <= grid[i][j] <= 50

Solutions

class Solution {
    public int surfaceArea(int[][] grid) {
        int[] dr = new int[]{0, 1, 0, -1};
        int[] dc = new int[]{1, 0, -1, 0};

        int N = grid.length;
        int ans = 0;

        for (int r = 0; r < N; ++r) {
            for (int c = 0; c < N; ++c) {
                if (grid[r][c] <= 0) {
                    continue;
                }

                // at least two facets will not be covered by other cubes
                // they are respectively the bottom most and the top most facets
                ans += 2;

                // check four horizontal directions
                for (int k = 0; k < 4; ++k) {
                    int nr = r + dr[k];
                    int nc = c + dc[k];

                    int nv = 0;

                    // verify whether coordinate is valid
                    if (0 <= nr && nr < N && 0 <= nc && nc < N) {
                        nv = grid[nr][nc];
                    }

                    // if height of neighbor cube tower is equal or higher than current one
                    // all the facets on corresponding direction are all blocked out.
                    ans += Math.max(grid[r][c] - nv, 0);
                }
            }

        }

        return ans;
    }
}

Incorrect Solutions

References

Copyright © iovi.com 2017 all right reserved,powered by GitbookLast Modification: 2019-12-03 11:01:18

results matching ""

    No results matching ""