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

Diện tích bề mặt hình 3D trong Python


Giả sử có lưới N x N, ta đặt khối 1x1x1. Mỗi giá trị v = grid[i][j] là tháp v khối đặt trên ô (i,j). Ta tìm tổng diện tích bề mặt hình kết quả.

Ví dụ, [[1,2],[3,4]], đầu ra 34.

Giải quyết:

  • Định nghĩa hàm adjacentArea(row)
  • area := 0
  • for i in range(len(row)-1), do
    • if row[i] and row[i+1] khác 0, area += 2 * min(row[i], row[i+1])
  • return area
  • Từ main: z := 2 * (sum(sum(i>0 for i in row) for row in grid))
  • x_plus_y := sum(sum(row) for row in grid) * 4
  • x_adjacent := sum(adjacentArea(row) for row in grid)
  • y_adjacent := sum(adjacentArea(row) for row in zip(*grid))
  • return z + (x_plus_y - x_adjacent - y_adjacent)

Xem triển khai:

Ví dụ

class Solution:
    def surfaceArea(self, grid):
        def adjacentArea(row):
            area = 0
            for i in range(len(row) - 1):
                if row[i] and row[i + 1]:
                    area += 2 * min(row[i], row[i+1])
            return area
        z = sum([sum(i > 0 for i in row) for row in grid]) * 2
        x_plus_y = sum([sum(row) for row in grid]) * 4
        x_adjacent = sum([adjacentArea(row) for row in grid])
        y_adjacent = sum([adjacentArea(row) for row in zip(*grid)])
        return z + (x_plus_y - x_adjacent - y_adjacent)
ob = Solution()
print(ob.surfaceArea([[1,2],[3,4]]))

Đầu vào

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

Đầu ra

34