题目链接2894. 分类求和并作差 - 力扣LeetCode题目描述给你两个正整数n和m。现定义两个整数num1和num2如下所示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 作为答案。解题思路这段代码的目的是计算两个数的差值num1所有不能被m整除的整数的和从1到n。num2所有能被m整除的整数的和从1到n。最终结果是num1 - num2。具体步骤如下初始化一个变量ans为0用于存储最终的差值。遍历从1到n的所有整数如果当前数字i能被m整除即i % m 0则从ans中减去i相当于减去num2中的一部分。否则将i加到ans中相当于加上num1中的一部分。遍历结束后ans的值就是num1 - num2的结果。题解代码classSolution{publicintdifferenceOfSums(intn,intm){intans0;// 初始化结果变量用于存储最终的差值for(inti1;in;i){// 遍历从1到n的所有整数if(i%m0){// 检查当前数字i是否能被m整除ans-i;// 如果能被整除则从ans中减去i}else{ansi;// 如果不能被整除则将i加到ans中}}returnans;// 返回最终的差值结果}}复杂度分析时间复杂度代码的主要操作是一个从1到n的循环循环的次数是n次。循环内的操作取模、加减法都是常数时间操作O(1)。因此总的时间复杂度是O(n)。空间复杂度代码中只使用了固定数量的额外空间如变量ans和循环变量i与输入规模n无关。因此空间复杂度是O(1)常数空间。