首页 > 解决方案 > 谁能帮我理解 Leetcode 自除数练习的解决方案

问题描述

这是练习的链接: https ://leetcode.com/problems/self-dividing-numbers/

我有代码,但在调用第一个 map 方法后我无法理解如何解释它。

.map((integer) => integer !== 0 && number % integer === 0) 这将检查整数数组中的单个整数是否不为 0(因为 SDN 不能包含 0)以及该数字是否可以被整数自整除。这个解释正确吗?如果我们在调用第二个 map 方法后返回它,数组会是什么样子?

至于reduce方法,我完全迷路了。为什么使用它?

谢谢

var SDN = function(number) {

    // change number to string
    // use split to get number string to be an array of integers as strings
    // map(Number) to change array of strings to array of numbers

    return number.toString()
                .split('')
                .map(Number)
                .map((integer) => integer !== 0 && number % integer === 0)
                .reduce((a,b) => a && b)
}

var selfDividingNumbers = function(left, right) {
    let res = []
    for(let i = left; i <= right; i++) {
        if(SDN(i)) {
            res.push(i)
        }
    }
    return res
};

标签: javascript

解决方案


.map((integer) => integer !== 0 && number % integer === 0)这将检查整数数组中的单个整数是否不为 0(因为 SDN 不能包含 0)以及该数字是否可以被整数自整除。这个解释正确吗?

正确的。

如果我们在调用第二个 map 方法后返回它,数组会是什么样子?

这将是一组真值或假值,每个值取决于您在上面解释的条件。

至于reduce方法,我完全迷路了。为什么使用它?

reduce 方法获取真或假值的数组,然后将它们全部按顺序排列。这将返回单个真值或假值,本质上表示“所有值都为真吗?”的问题。


作为reduce解释的扩展,reduce 需要一个带有两个参数的回调函数;以前的值和当前值。此外,previous 的第一个值可能有一个种子(在您的示例中未使用)。然后reduce将迭代并将前一个值和当前值注入回调函数,使用返回作为下一个前一个值。

reduce(function(previous, current){ ... }, optionalSeedForFirstPrevious)

使用您给出的示例,这意味着这a是以前的值,并且b是当前值。箭头函数返回a && b每次的结果。

所以,如果你有[true, false, true],这意味着 reduce 将基本上评估为

iteration1 = true && false;
iteration2 = iteration1 && true;
return iteration2; //false

如果你有[true, true, true],这意味着 reduce 将基本上评估为

iteration1 = true && true;
iteration2 = iteration1 && true;
return iteration2; //true

有关reduce 的更多信息,请访问 Mozilla 开发者网络


推荐阅读