📅  最后修改于: 2023-12-03 15:21:26.136000             🧑  作者: Mango
这个题目要求我们求某个数字n的倍数之和,要求求和的倍数最多不能超过N。
我们可以使用贪心算法的思想来解决这个问题。我们从n的最大倍数开始,每次减去n,直到减不了为止,然后再取下一个最大的倍数,重复以上操作。这样就能保证取得的倍数总数最多。
/**
* @param {number} n - 数字n
* @param {number} N - 最多取的倍数数
* @return {number} 返回n的倍数之和,最多N个数
*/
function multipleSum(n, N) {
if (n === 0 || N === 0) {
return 0;
}
let sum = 0;
let multipleCount = 0;
let multiple = n * Math.floor(N / 2);
while (multiple > 0 && multipleCount < N) {
sum += multiple;
multipleCount++;
multiple -= n;
}
return sum;
}
假设n是我们要求倍数的数,N是最多取的倍数数。时间复杂度为O(N)。