首页 > 解决方案 > 嵌套列表权重总和算法问题

问题描述

我正在尝试解决这个问题“嵌套列表权重总和”:https ://leetcode.com/problems/nested-list-weight-sum/description/

问题:

给定列表 [[1,1],2,[1,1]],返回 10。(深度 2 处有四个 1,深度 1 处有一个 2)

这是我的解决方案。

var depthSum = function (nestedList, sum=0, depth=1) {
    nestedList.forEach((val) => {
        if (Array.isArray(val)) {
            depth = depth+1;
            return depthSum(val, sum, depth);
        } else {
            sum += val * depth;
        }
    });
    return sum;
};

不知道我错过了什么。当我调试它时,在某些时候我得到了答案,但return sum没有启动,我得到了不同的答案。

有人可以指出我的错误吗?

标签: javascriptarraysmultidimensional-array

解决方案


您可以通过返回每个级别的总和来使用Array#reduce和省略sum每个级别。

function depthSum(nestedList, level = 1) {
    return nestedList.reduce((sum, val) =>
        sum + (Array.isArray(val)
            ? depthSum(val, level + 1)
            : level * val),
        0);
};

console.log(depthSum([[1, 1], 2, [1, 1]]));


推荐阅读