嵌套列表的加权和II
https://www.lintcode.com/problem/905/description?utm_source=sc-libao-ql
描述
给一个嵌套的整数列表, 返回列表中所有整数由它们的深度加权后的总和. 每一个元素可能是一个整数或一个列表(其元素也可能是整数或列表)。 注意,在之前的题目嵌套列表的加权和中,从根结点到叶子结点,深度权重是递增的。在嵌套列表的加权和II中,深度权重的定义是自下而上的,也就是说,最底层叶子结点的深度权重是1 ,根结点的深度权重最大。
样例
样例 1:
输入: nestedList = [[1,1],2,[1,1]]输出: 8解释:四个深度为 1 的 1,一个深度为 2 的 2
样例 2:
输入: nestedList = [1,[4,[6]]]输出: 17解释:一个深度为 3 的 1, 一个深度为 2 的 4,和一个深度为 1 的 61*3 + 4*2 + 6*1 = 17
解题分析:
用bfs遍历,得到层数和每一层的总和,存入一个map。最后sum map里的总和,注意根部的层数最大,需要特殊处理。
错误点:每层需要计算level sum, 而不是直接单独每个Int 加入map,因为int 有重复,直接存入Map被覆盖。
from collections import deque
class Solution:
"""
@param nestedList: a list of NestedInteger
@return: the sum
"""
def depthSumInverse(self, nestedList):
# Write your code here.
q = deque(nestedList)
level = 0
items = {}
while q:
level += 1
n = len(q)
levelsum = 0
for _ in range(n):
cur = q.popleft()
if cur.isInteger():
levelsum += cur.getInteger()
else:
q.extend(cur.getList())
items[levelsum] = level
return sum(k*(abs(level-v)+1) for k,v in items.items())
Last updated
Was this helpful?