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