Leetcode172. 阶乘后的零

Leetcode172. 阶乘后的零

题目:
给定一个整数 n,返回 n! 结果尾数中零的数量。
题解:
方案一:
计算N的阶乘(N!=12…*N)有多少个后缀0,即计算N!里有多少个10,也就是计算N!里有多少个2和5(数学原理:分解质因数),最后结果即2的个数和5的个数取较小值。

  • 时间复杂度为O(NlogN)

方案二:
N!质因数里2的个数总是要比5的个数多,因此此题就变成了求解N!里有多少个质因数5
N!有多少个后缀0,即N!有多少个质因数5。
scala代码如下:

def trailingZeroes2(n: Int): Int = {
    var count1 = 0
    var count2 = 0
    for (i <- 2 to n) {
      var value = i
      while (value % 2 == 0) {
        count1 += 1
        value = value / 2
      }
      while (value % 5 == 0) {
        count2 += 1
        value = value / 5
      }
    }
    Math.min(count1, count2)
  }
 def trailingZeroes3(n: Int): Int = {
    var count1 = 0
    for (i <- 2 to n) {
      var value = i
      while (value % 5 == 0) {
        count1 += 1
        value = value / 5
      }
    }
    count1
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值