172. Factorial Trailing Zeroes
题目简介:给定一个数n,求n!的结尾连续的0的个数。
解题思路:通过观察可得,0只可能由2和5相乘获得,而5的个数总是小于等于2的个数,所以问题就转为了寻找n!中因子5的个数。代码如下:
class Solution(object):
def trailingZeroes(self, n):
"""
:type n: int
:rtype: int
"""
count = 0
while n:
count+=int(n/5)
n = int(n/5)
return count
204. Count Primes
题目简介:求解小于n的质数的个数。
解题思路:利用leetcode提供的hints可得到一种快速的解法。代码如下:
import math
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
if n < 3:
return 0
count = 0
numberBook = [1]*n
numberBook[0] = 0
numberBook[1] = 0
for i in range(2,int(math.sqrt(n)+1)):
if numberBook[i] and self.checkPrime(i):
t = i
while (t*i < n):
numberBook[t*i] = 0
t+=1
return sum(numberBook)
def checkPrime(self,n):
for i in range(2,int(math.sqrt(n)+1)):
if n % i == 0:
return False
return True
453. Minimum Moves to Equal Array Elements
题目简介:对含有n个元素的数组,每次对n-1个数加1,直到最后所有数都相等。求需要加1的最少次数。
解题思路:易知,不被加1的数肯定是当前数组里的最大值。因此,可以反向思考,要对除了最大值以外的所有数加1,就相当于把最大值减1,而其他数不变。此题也就转化为了,其余各个数与最小值的差值为多少。代码如下:
class Solution(object):
def minMoves(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return sum(nums)-len(nums)*min(nums)