Python 中的嵌套列表权重和 II

pythonserver side programmingprogramming

给定一个嵌套的整数列表,返回列表中所有整数按其深度加权的和。每个元素要么是整数,要么是列表——其元素也可能是整数或其他列表。与上一个权重从根到叶增加的问题不同,现在权重是从下往上定义的。即,叶级整数的权重为 1,根级整数的权重最大。

因此,如果输入为 [[1,1],2,[1,1]],则输出将为 8,因为深度 1 处有四个 1,深度 2 处有一个 2。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数depthSumInverse()。这将采用 nestedList

  • flats:= 一个新列表

  • maxd:= 0

  • 定义一个函数 flatten() 。这将需要 nlst,dist

  • dist := dist + 1

  • maxd:= maxd, dist 的最大值

  • 对于 nlst 中的每个节点,执行

    • 如果节点是非零的整数,则

      • 在 flats 的末尾插入 (node,dist)

    • 否则,

      • flatten(node, dist)

  • flatten(nestedList, 0)

  • summ:= 0

  • 对于每个v,d 以平面形式表示,do

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

  • 返回 summ

示例

让我们看下面的实现,以便更好地理解 −

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

相关文章


有用资源