给你一个正整数 n
,请你计算在 [1,n]
范围内能被 3
、5
、7
整除的所有整数之和。
返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。
示例 1:
输入:n = 7 输出:21 解释:在[1, 7]
范围内能被 3、5、
7 整除的所有整数分别是
3、5、6、7
。数字之和为21
。
示例 2:
输入:n = 10 输出:40 解释:在[1, 10]
范围内能被 3、5、
7 整除的所有整数分别是
3、5、6、7、9、10
。数字之和为40
最终结果
class Solution(object): def sumOfMultiples(self, n): """ :type n: int :rtype: int """ num_three = n//3 num_five = n//5 num_seven = n//7 num_15 = n//15 num_21 = n//21 num_35 = n//35 num_105 = n//105 return 3*num_three+num_three*(num_three-1)*3/2+5*num_five+num_five*(num_five-1)*5/2+7*num_seven+num_seven*(num_seven-1)*7/2+105*num_105+num_105*(num_105-1)*105/2-15*num_15-num_15*(num_15-1)*15/2-21*num_21-num_21*(num_21-1)*21/2-35*num_35-num_35*(num_35-1)*35/2
经过:最开始没想用暴力解法 感觉能用数学知识做 但是我的思路里面没有考虑到15这种既是3又是5的倍数的数 所以会计算两次
class Solution(object): def sumOfMultiples(self, n): """ :type n: int :rtype: int """ num_three = n//3 num_five = n//5 num_seven = n//7 return 3*num_three+num_three*(num_three-1)*3/2+5*num_five+num_five*(num_five-1)*5/2+7*num_seven+num_seven*(num_seven-1)*7/2
尝试两次WA后 感觉不知道怎么解决
遂尝试暴力
顺利解决
class Solution(object): def sumOfMultiples(self, n): """ :type n: int :rtype: int """ ans = 0 for i in range(1,n+1): if(i%3 == 0 or i%5==0 or i%7 ==0): ans = ans + i return ans
过了 但是感觉不能靠暴力解决 且最近也是想学一学算法
遂看题解 新学一知识叫做容斥原理
于是再尝试 第一次因为+ - 错误
第二次通过 但是看起来实在冗长 确实不如题解中那样再写一个函数简洁
标签:seven,15,21,2652,three,num,five From: https://www.cnblogs.com/LYoungH/p/17769294.html