可被 n 整除之和 (JavaScript)
问题
我们需要编写一个 JavaScript 函数,该函数将一个数字数组 arr 作为第一个参数,将一个数字 num 作为第二个参数。我们的函数应返回具有可被 num 整除的总和的子数组数量(连续且非空)。
例如,如果输入的函数为 −
const arr = [4, 5, 0, -2, -3, 1]; const num = 5;
则输出应为 −
const output = 7;
输出说明
有 7 个子数组的总和可被 5 整除 −
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.
示例
代码如下 −
const arr = [4, 5, 0, -2, -3, 1]; const num = 5; const divisibleSum = (arr = [], num = 1) => { const map = {}; let sum = 0; for (let i = 0; i < arr.length; i++) { sum += arr[i]; const key = ((sum % num) + num) % num; map[key] = map[key]+1||1; }; let s = 0; for (let i = 0; i < num; i++) { if (map[i] > 1) { s += (map[i] * (map[i] - 1)) / 2; } } return s + (map[0]||0); }; console.log(divisibleSum(arr, num));
输出
控制台中的输出为 −
7
广告