Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

พื้นที่ผิวของรูปร่าง 3 มิติใน Python


สมมติว่ามีตาราง 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]
  • จุดส่งกลับ
  • จากวิธีหลัก ให้ทำดังนี้ -
  • 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