Giả sử có một lưới N x N, chúng ta đặt một số hình lập phương 1 x 1 x 1. trong đó. Bây giờ với mỗi giá trị v =grid [i] [j] đại diện cho một tháp gồm v hình khối được đặt trên đầu của ô lưới (i, j). Chúng ta phải tìm tổng diện tích bề mặt của các hình dạng thu được.
Vì vậy, nếu đầu vào là [[1,2], [3,4]], thì đầu ra sẽ là 34.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Định nghĩa một hàm lân cậnArea (). Điều này sẽ có hàng
- khu vực:=0
- đối với tôi trong phạm vi từ 0 đến kích thước của hàng - 1, thực hiện
- nếu hàng [i] và hàng [i + 1] khác 0, thì
- area:=area + 2 * tối thiểu của hàng [i], hàng [i + 1]
- nếu hàng [i] và hàng [i + 1] khác 0, thì
- khu vực trả lại
- Từ phương thức chính, hãy làm như sau -
- z:=2 * (tổng của (tổng giá trị i trong hàng) cho tất cả hàng trong lưới)
- x_plus_y:=tổng của tất cả các phần tử trong lưới * 4
- x_adjacent:=tổng của Liền kềArea (hàng) cho tất cả hàng trong lưới
- y_adjacent:=tổng của Liền kềArea (hàng) cho tất cả các cột trong lưới
- return z + (x_plus_y - x_adjacent - y_adjacent)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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