Python 中的嵌套列表权重和 II


给定一个整数的嵌套列表,返回列表中所有整数的和,其权重由其深度加权。每个元素要么是一个整数,要么是一个列表——其元素也可能是整数或其他列表。与权重从根到叶不断增加的前一个问题不同,现在的权重是从下向上定义的。即叶级整数的权重为 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

  • 对于 flats 中的每个 v,d,执行

    • 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

更新时间: 19-11-2020

243 次浏览

开启您的 职业生涯

完成课程即可获得认证

开始
广告
© . All rights reserved.