给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
思路一:
先计算阶乘总乘积,再除10计算0的个数,n为大数时,内存溢出,时间负责度也不是要求的O(log n)
思路二:
找规律
5!=5*4*3*2*1
10!=10*9*8*7*6*5*4*3*2*1
15!=15*14*13*12*11*10*9*8*7*6*5*4*3*2*1
20!=20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1
25!=25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1
题目求0的个数,因为10 = 5 * 2,就转变了求 5 的个数。
5! 含5 5 共1个5
10! 含5 10 5 共2个5
15! 含5 15 10 5 共3个5
20!含5 20 15 10 5 共4个5
25!含5 25(含2个5) 20 15 10 5 共6个5 每5个数含1个5 每25个数含1个25(多含1个5)
125!每5个数含1个5 每25个数含1个25(多含1个5)每125个数含1个125(又多含1个5)
class Solution { func trailingZeroes(_ n: Int) -> Int { var five = 0 var n = n while n >= 5 { n /= 5 five += n } return five } }