Python中的嵌套列表权重总和II

给定一个嵌套的整数列表,返回列表中所有整数的总和,并按其深度加权。每个元素可以是整数,也可以是列表-其元素也可以是整数或其他列表。与之前的问题从根到叶的权重增加的问题不同,现在从下至上定义了权重。也就是说,叶级整数的权重为1,而根级整数的权重最大。

因此,如果输入类似于[[1,1],2,[1,1]],则输出将为8,深度1为四个1,深度2为2。

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

  • 定义一个功能depthSumInverse()。这将需要nestedList

  • 单位:=新列表

  • 最大值:= 0

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

  • 距离:=距离+ 1

  • maxd:= maxd,dist的最大值

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

    • 展平(节点,距离)

    • 在单位末尾插入(node,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