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

รายการน้ำหนักรวมซ้อน II ใน Python


ให้แสดงรายการจำนวนเต็มที่ซ้อนกัน ให้ส่งคืนผลรวมของจำนวนเต็มทั้งหมดในรายการที่ถ่วงน้ำหนักตามความลึก แต่ละองค์ประกอบอาจเป็นจำนวนเต็มหรือรายการ ซึ่งองค์ประกอบอาจเป็นจำนวนเต็มหรือรายการอื่นๆ ด้วย ต่างจากคำถามก่อนหน้านี้ที่น้ำหนักเพิ่มขึ้นจากรากสู่ใบ ตอนนี้น้ำหนักถูกกำหนดจากล่างขึ้นบน กล่าวคือ จำนวนเต็มระดับใบมีน้ำหนัก 1 และจำนวนเต็มระดับรากจะมีน้ำหนักมากที่สุด

ดังนั้น หากอินพุตเป็นเหมือน [[1,1],2,[1,1]] เอาต์พุตจะเป็น 8 เช่นเดียวกับ 4 ตัวที่ความลึก 1 ตัวที่ 2 ที่ความลึก 2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน deepSumInverse() นี่จะใช้ nestedList

  • แฟลต:=รายการใหม่

  • maxd:=0

  • กำหนดฟังก์ชัน flatten() นี่จะใช้เวลา nlst,dist

  • dist :=dist + 1

  • maxd:=สูงสุดของ maxd, dist

  • สำหรับแต่ละโหนดใน nlst ให้ทำ

    • ถ้าโหนดเป็นจำนวนเต็มไม่เป็นศูนย์ ดังนั้น

      • แทรก (node,dist) ที่ส่วนท้ายของแฟลต

    • มิฉะนั้น

      • แผ่(โหนด, dist)

  • แบน (nestedList, 0)

  • ผลรวม:=0

  • สำหรับแต่ละ v,d ในแฟลต ทำ

    • summ :=summ + v*(maxd+1-d)

  • ผลตอบแทนรวม

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution(object):
   def depthSumInverse(self, nestedList):
      flats=[]
      self.maxd=0
      def flatten(nlst,dist):
         if isinstance(nlst,list):
            nlst=nlst
         dist+=1
         self.maxd=max(self.maxd,dist)
         for node in nlst:
            if isinstance(node,int):
               flats.append((node,dist))
            else:
               flatten(node,dist)
      flatten(nestedList,0)
      summ=0
      for v,d in flats:
         summ+=v*(self.maxd+1-d)
      return summ

ob = Solution()
print(ob.depthSumInverse([[1,1],2,[1,1]]))

อินพุต

[[1,1],2,[1,1]]

ผลลัพธ์

8