从Leetcode处理以下问题:
给定一个嵌套的整数列表,返回所有整数的总和 列表按其深度加权。
每个元素都是整数或列表 - 其元素可以是 也可以是整数或其他列表。
与上一个重量增加的问题不同 从根到叶,现在重量从下到上定义。即叶子 级别整数的权重为1,根级整数的权重为1 最重的。
示例1:给定列表[[1,1],2,[1,1]],返回8.(四个1位于 深度1,深度为2的一个2)
示例2:给定列表[1,[4,[6]]],返回17.(深度3处为1, 深度为2的一个4,深度为1的一个6; 1 * 3 + 4 * 2 + 6 * 1 = 17)
我的策略是在一次通过中找到深度,然后每个分支贡献(depth - branch_num)到总和。所以顶部分支=深度,第二个分支是深度 - 1,等等。这是我的代码:
# This is the interface that allows for creating nested lists.
# You should not implement it, or speculate about its implementation
#
#class NestedInteger
# def is_integer()
# """
# Return true if this NestedInteger holds a single integer, rather than a nested list.
# @return {Boolean}
# """
#
# def get_integer()
# """
# Return the single integer that this NestedInteger holds, if it holds a single integer
# Return nil if this NestedInteger holds a nested list
# @return {Integer}
# """
#
# def set_integer(value)
# """
# Set this NestedInteger to hold a single integer equal to value.
# @return {Void}
# """
#
# def add(elem)
# """
# Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
# @return {Void}
# """
#
# def get_list()
# """
# Return the nested list that this NestedInteger holds, if it holds a nested list
# Return nil if this NestedInteger holds a single integer
# @return {NestedInteger[]}
# """
#
# @param {NestedInteger[]} nested_list
# @return {Integer}
def depth_sum_inverse(nested_list)
max_depth = max_depth(nested_list)
depth_summation(nested_list, max_depth, 1)
end
def depth_summation(nested_list, max_depth, depth)
sum = 0
nested_list.each do |el|
if el.get_integer.nil?
sum += (max_depth - depth) + depth_summation(el.get_list, depth+1)
else
sum += el.get_integer*(max_depth - depth)
end
end
sum
end
def max_depth(nested_list)
temp = 1
d = 1
nested_list.each do |el|
temp = depth(el)
if temp > d
d = temp
end
end
d
end
def depth(el)
if el.is_integer
return 1
else
depth = 1 + depth(el.get_list)
end
depth
end
开头注释掉的部分是为了帮助您理解“NestedInteger”类的API。
所以这就是我在努力的地方。我收到此错误消息:
第69行:'深度':未定义的方法'is_integer'为 (NoMethodError)。
当元素应该是NestedInteger类的对象时,该元素被重新枚举为数组。知道为什么会这样吗?