สมมติว่ามีตาราง N x N เราวางลูกบาศก์ขนาด 1 x 1 x 1 ลูกบาศก์ ในนั้น. ตอนนี้สำหรับแต่ละค่า v =grid[i][j] หมายถึงหอคอย v ลูกบาศก์ที่วางอยู่บนเซลล์กริด (i, j) เราต้องหาพื้นที่ผิวทั้งหมดของรูปทรงที่ได้
ดังนั้นหากอินพุตเป็น [[1,2],[3,4]] เอาต์พุตจะเป็น 34
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน นี่จะเป็นแถว
- พื้นที่ :=0
- สำหรับฉันในช่วง 0 ถึงขนาดของแถว - 1 ทำ
- ถ้า row[i] และ row[i + 1] ไม่ใช่ศูนย์ ดังนั้น
- พื้นที่ :=พื้นที่ + 2 * ขั้นต่ำของแถว[i], แถว[i+1]
- ถ้า row[i] และ row[i + 1] ไม่ใช่ศูนย์ ดังนั้น
- จุดส่งกลับ
- จากวิธีหลัก ให้ทำดังนี้ -
- z :=2* (ผลรวมของ (ผลรวมของค่า i ในแถว) สำหรับทุกแถวในตาราง)
- x_plus_y :=ผลรวมขององค์ประกอบทั้งหมดในกริด * 4
- x_adjacent :=ผลรวมของพื้นที่ติดกัน (แถว) สำหรับทุกแถวในตาราง
- y_adjacent :=ผลรวมของพื้นที่ติดกัน(แถว) สำหรับทุกคอลัมน์ในตาราง
- กลับ z +(x_plus_y - x_adjacent - y_adjacent)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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]]))
อินพุต
[[1,2],[3,4]]
ผลลัพธ์
34