📜  一个数字的倍数之和,最多N(1)

📅  最后修改于: 2023-12-03 15:21:26.136000             🧑  作者: Mango

一个数字的倍数之和,最多N

简介

这个题目要求我们求某个数字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)。