给你两个正整数 n 和 m 。
现定义两个整数 num1 和 num2 ,如下所示:
num1:范围[1, n]内所有 无法被m整除 的整数之和。num2:范围[1, n]内所有 能够被m整除 的整数之和。
返回整数 num1 - num2 。
第一时间想到 class Solution { func differenceOfSums(_ n: Int, _ m: Int) -> Int { var sum1 = 0 var sum2 = 0 for i in 0...n{ if(i < m){ sum1+=i }else{ if(i%m == 0){ sum2+=i }else{ sum1+=i}}} return sum1-sum2}}
通过了,内存和时间都不对
两个sum能不能干掉一个sum, class Solution { func differenceOfSums(_ n: Int, _ m: Int) -> Int { var sum1 = 0 for i in 0...n{ if(i < m){ sum1+=i }else{ if(i%m == 0){ sum1-=i }else{ sum1+=i}}} return sum1 } }
立刻去掉一个sum 内存立马干掉100%用户,运行时间还是不对,时间复杂度是n,说明这道题不能遍历解决,改了一下循环,显著降低循环量没效果,内存问题又回来了,全靠电脑速度快。
class Solution {
func differenceOfSums(_ n: Int, _ m: Int) -> Int {
var sum1 = 0
if n >= m{
sum1 = (n+1)n/2
for i in 1...n/m{
sum1 = sum1 - im - i*m}}else{
sum1 = (n+1)*n/2
}
return sum1
}
}
另一个sum也不能要,怎么不要sum呢?下面直接return,慢慢发现上面i*m也是等差公式。也可以用等差公式直接return,遇到一个奇葩的问题
class Solution { func differenceOfSums(_ n: Int, _ m: Int) -> Int { if n >= m{ return (n+1)*n/2 - (m * (n/m) + m) * (n/m)/2 - (m * (n/m) + m) * (n/m)/2 }else{ return(n+1)*n/2 }}}
服了,还是不行。没循环啊!仔细看一看,n大于m还是n小于m都没啥区别,余了之后会变成0,去掉判断。 func differenceOfSums(_ n: Int, _ m: Int) -> Int { return (n+1)*n/2 - (m * (n/m) + m) * (n/m)/2 - (m * (n/m) + m) * (n/m)/2 }
结果这都不行,吗的,电脑问题吧。
连减两个可以去掉,结果还是不行。 class Solution { func differenceOfSums(_ n: Int, _ m: Int) -> Int { return (n+1)*n/2 - (m * (n/m) + m) * (n/m) }}
class Solution { func differenceOfSums(_ n: Int, _ m: Int) -> Int { return (n+1)*n/2 - m * ((n/m) + 1) * (n/m) }}
提取了一下公因式还是不行,改用谷歌浏览器不行,受不了了,绝对是电脑的问题。