Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Diện tích chiếu hình 3D (Projection Area of 3D Shapes)


Giả sử lưới N x N, đặt khối 1x1x1 trục x,y,z. Giá trị v = grid[i][j] là tháp v khối trên ô (i,j). Ta xem chiếu các khối lên mặt phẳng xy, yz, zx. Ta nhìn từ trên (top), trước (front), bên (side). Tìm tổng diện tích ba chiếu.

Ví dụ [[1,2],[3,4]] cho kết quả 17.

Diện tích chiếu hình 3D (Projection Area of 3D Shapes)

Giải quyết:

  • xy=0, yz=0, xz=0
  • for r, row in enumerate(grid):
    • yz += max(row)
    • for c, col in enumerate(row):
      • if grid[r][c] > 0: xy += 1
    • for col in zip(*grid): xz += max(col)
  • return xy + yz + xz

Xem triển khai:

Ví dụ

class Solution(object):
    def projectionArea(self, grid):
        xy = 0
        yz = 0
        xz = 0
        for r, row in enumerate(grid):
            yz += max(row)
            for c, col in enumerate(row):
                if grid[r][c] > 0:
                    xy += 1
            for col in zip(*grid):
                xz += max(col)
        return xy + yz + xz
ob = Solution()
print(ob.projectionArea([[1,2],[3,4]]))

Đầu vào

[[1,2],[3,4]]

Đầu ra

17