【发布时间】:2019-02-08 00:52:39
【问题描述】:
我正在尝试解决这个问题,我们计算给定数字数组的嵌套权重总和。
给定一个嵌套的整数列表,返回其中所有整数的总和 按深度加权的列表。
例如:
[[1,1],2,[1,1]] ====> 解是 10。
深度 2 有四个 1,深度 1 有一个 2。
这是我写的代码:
var depthSum = function (nestedList, sum=0, depth=1) {
for(let i=0; i<nestedList.length; i++){
let val = nestedList[i];
if (Array.isArray(val)) {
return depthSum(val, sum, depth+1);
} else {
sum += val * depth;
}
};
return sum;
};
我正在尝试解决相反的问题。即
给定一个嵌套的整数列表,返回其中所有整数的总和 按深度加权的列表。重量从根到增加 叶,现在权重是自下而上定义的。即叶级 整数的权重为 1,根级整数的权重最大 重量。
示例: [[1,1],2,[1,1]] ===> 解是 8。
我怎样才能使用相同的方法来解决这个问题?
(https://leetcode.com/problems/nested-list-weight-sum-ii/description/)
【问题讨论】:
-
我会遍历以找到最大深度,然后在第二次遍历中应用您之前的算法。该链接仅供高级会员使用。
-
感谢 ggorlen 的输入,您能告诉我它是如何工作的吗?我应该喜欢阵列上的 DFS 并首先找到最大深度吗?
-
它不是真正的 DFS 或 BFS,因为您必须搜索整个结构,所以任何完全遍历都可以。我会发布一些代码,但我无法在您的链接上验证它。
-
ggorlen 是对的。它需要两次遍历——一次找到最大深度,然后一次计算结果。基于队列的 BFS 对两者都适用。
-
如果您保留每个级别的总数列表,然后在遍历后将它们乘以它们的深度,则不需要两次遍历。
标签: javascript arrays algorithm array-algorithms