返回介绍

solution / 2800-2899 / 2894.Divisible and Non-divisible Sums Difference / README

发布于 2024-06-17 01:02:59 字数 3256 浏览 0 评论 0 收藏 0

2894. 分类求和并作差

English Version

题目描述

给你两个正整数 nm

现定义两个整数 num1num2 ,如下所示:

  • num1:范围 [1, n] 内所有 无法被 m 整除 的整数之和。
  • num2:范围 [1, n] 内所有 能够被 m 整除 的整数之和。

返回整数 num1 - num2

 

示例 1:

输入:n = 10, m = 3
输出:19
解释:在这个示例中:
- 范围 [1, 10] 内无法被 3 整除的整数为 [1,2,4,5,7,8,10] ,num1 = 这些整数之和 = 37 。
- 范围 [1, 10] 内能够被 3 整除的整数为 [3,6,9] ,num2 = 这些整数之和 = 18 。
返回 37 - 18 = 19 作为答案。

示例 2:

输入:n = 5, m = 6
输出:15
解释:在这个示例中:
- 范围 [1, 5] 内无法被 6 整除的整数为 [1,2,3,4,5] ,num1 = 这些整数之和 =  15 。
- 范围 [1, 5] 内能够被 6 整除的整数为 [] ,num2 = 这些整数之和 = 0 。
返回 15 - 0 = 15 作为答案。

示例 3:

输入:n = 5, m = 1
输出:-15
解释:在这个示例中:
- 范围 [1, 5] 内无法被 1 整除的整数为 [] ,num1 = 这些整数之和 = 0 。 
- 范围 [1, 5] 内能够被 1 整除的整数为 [1,2,3,4,5] ,num2 = 这些整数之和 = 15 。
返回 0 - 15 = -15 作为答案。

 

提示:

  • 1 <= n, m <= 1000

解法

方法一:模拟

我们遍历区间 $[1, n]$ 中的每一个数,如果它能被 $m$ 整除,那么答案就减去这个数,否则答案就加上这个数。

遍历结束后,返回答案即可。

时间复杂度 $O(n)$,其中 $n$ 是题目给定的整数。空间复杂度 $O(1)$。

class Solution:
  def differenceOfSums(self, n: int, m: int) -> int:
    return sum(i if i % m else -i for i in range(1, n + 1))
class Solution {
  public int differenceOfSums(int n, int m) {
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
      ans += i % m == 0 ? -i : i;
    }
    return ans;
  }
}
class Solution {
public:
  int differenceOfSums(int n, int m) {
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
      ans += i % m ? i : -i;
    }
    return ans;
  }
};
func differenceOfSums(n int, m int) (ans int) {
  for i := 1; i <= n; i++ {
    if i%m == 0 {
      ans -= i
    } else {
      ans += i
    }
  }
  return
}
function differenceOfSums(n: number, m: number): number {
  let ans = 0;
  for (let i = 1; i <= n; ++i) {
    ans += i % m ? i : -i;
  }
  return ans;
}

方法二

class Solution {
  public int differenceOfSums(int n, int m) {
    int sum = n * (n + 1) / 2;
    int k = n / m;
    int nums2 = k * (k + 1) / 2 * m;
    return sum - nums2 * 2;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文