Given a nested list of integers, return the sum of all integers in the list weighted by their depth.

Each element is either an integer, or a list -- whose elements may also be integers or other lists.

Different from the previous question where weight is increasing from root to leaf, now the weight is defined from bottom up. i.e., the leaf level integers have weight 1, and the root level integers have the largest weight.

Example 1:
Given the list [[1,1],2,[1,1]], return 8. (four 1's at depth 1, one 2 at depth 2)

Example 2:
Given the list [1,[4,[6]]], return 17. (one 1 at depth 3, one 4 at depth 2, and one 6 at depth 1; 1*3 + 4*2 + 6*1 = 17)

这个题目实际上就是[LeetCode] 339. Nested List Weight Sum_Easy tag:DFS的变形, 没啥好说的, 用一个maxDepth来去得到最大的depth, 然后把339 的code拿来, depth递减即可.

Data Structure.

# """
# This is the interface that allows for creating nested lists.
# You should not implement it, or speculate about its implementation
# """
#class NestedInteger(object):
# def __init__(self, value=None):
# """
# If value is not specified, initializes an empty list.
# Otherwise initializes a single integer equal to value.
# """
#
# def isInteger(self):
# """
# @return True if this NestedInteger holds a single integer, rather than a nested list.
# :rtype bool
# """
#
# def add(self, elem):
# """
# Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
# :rtype void
# """
#
# def setInteger(self, value):
# """
# Set this NestedInteger to hold a single integer equal to value.
# :rtype void
# """
#
# def getInteger(self):
# """
# @return the single integer that this NestedInteger holds, if it holds a single integer
# Return None if this NestedInteger holds a nested list
# :rtype int
# """
#
# def getList(self):
# """
# @return the nested list that this NestedInteger holds, if it holds a nested list
# Return None if this NestedInteger holds a single integer
# :rtype List[NestedInteger]
# """

Code

class Solution:
def NestedListWeightSum2(self, nestedList):
def maxDepth(nestedList, depth):
ans = 0
for each in nestedList:
if each.isInteger():
ans = max(ans, depth)
else:
ans = max(ans, maxDepth(each.getList(), depth + 1))
return ans
def helper(nestedList, depth):
s = 0
for each in nestedList:
if each.isInteger():
s += each.getInteger() * depth
else:
s += helper(each.getList(), depth -1)
return s
return helper(nestedList, maxDepth(nestedList, 1))

最新文章

  1. String.prototype运用
  2. java解析json
  3. JavaScript和DOM的产生与发展
  4. javascript 百度地图
  5. thinkphp 代码执行
  6. Socket 之 API函数介绍
  7. web.config配置详细说明
  8. [GRYZ2015]工业时代
  9. Sqlserver的触发器的简单使用
  10. scala学习笔记:控制抽象
  11. php实现base64编码
  12. IIS的php环境配置
  13. PHP中引入文件的四种方式及区别
  14. SoapUI 学习总结-02 断言
  15. method.invoke()s
  16. 打印sql
  17. MySQL 内置函数
  18. bzoj 松鼠的新家
  19. 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)
  20. [转载]DLL命名规则

热门文章

  1. VC++、Win32 SDK、MFC的区别
  2. C# chart 编程教程
  3. [转载]win7x64下的redis安装与使用
  4. 深入 Vue 生命周期
  5. C和C指针小记(四)-浮点类型
  6. [qemu][cloud][centos][ovs][sdn] centos7安装高版本的qemu 以及 virtio/vhost/vhost-user咋回事
  7. 多线程调试DLL
  8. DBCHART直方图顶端显示数字
  9. 转:JDBC中关于PreparedStatement.setObject的一些细节说明
  10. 操作系统->数组越界(待完善)