一、内容

给定一个整数 n ,返回 n! 结果中尾随零的数量。提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1示例 1:输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0示例 2:输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0示例 3:输入:n = 0
输出:0提示:0 <= n <= 104

二、思路

  • 首先最简单的办法是直接计算阶乘,但是由于数太大会导致溢出,那么我们可以用个小技巧,只保留末尾的几位数进行计算,因为前面的数并不会影响最末尾0的个数。
  • 然后我们可以进行优化,我们发现在末尾增加一个0是由于数乘上了10 = 2 x 5, 那么每当一个阶乘黎曼出现了 2 x 5,末尾便会多上一个0,于是题目转化为求解2x5的对数。直观上分析,2的个数肯定是多于5的,那么我们只需要求解5的个数。如何快速求解呢,可以通过观察阶乘来发现规律。如 1 ∗ 2 ∗ 3 ∗ 4 ∗ ( 1 ∗ 5 ) ∗ . . . ∗ ( 2 ∗ 5 ) . . ∗ ( 3 ∗ 5 ) . . . ∗ ( 4 ∗ 5 ) . . . ∗ ( 1 ∗ 5 ∗ 5 ) . . . ∗ ( 6 ∗ 5 ) . . . ∗ ( 2 ∗ 5 ∗ 5 ) . . . 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 *5) .. * (3 *5) ... * (4 * 5)... * (1 * 5*5)... * (6 * 5) ... * (2 * 5 * 5)... 1∗2∗3∗4∗(1∗5)∗...∗(2∗5)..∗(3∗5)...∗(4∗5)...∗(1∗5∗5)...∗(6∗5)...∗(2∗5∗5)...
    可以发现每5位数便会出现一个5,那么直接计算 n / 5 n/5 n/5就可以了,但是当n=25时,这时候又会多出现一个5,于是还要统计 n / 25 n /25 n/25, 同理可以发现125时又会多一个5,再加上一个 n / 125 n / 125 n/125, 这里可以使用递归来方便求解。

三、代码

  • 直接计算阶乘
class Solution {public:int trailingZeroes(int n) {int ans = 0, last = 1;for (int i = 2; i <= n; i++) {last *= i;while (last % 10 == 0) {last /= 10;ans++;}last  %= 100000;}return ans;}
};
  • 计算因子5的个数
class Solution {public:int trailingZeroes(int n) {return n >= 5 ? n / 5 + trailingZeroes(n / 5) : 0;}
};

LeedCode 172. 阶乘后的零相关推荐

  1. 【LeetCode 172. 阶乘后的零】

    LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...

  2. Leetcode 172. 阶乘后的零 解题思路及C++实现

    解题思路: 找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意. class Solution { public ...

  3. 172. 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...

  4. 力扣172.阶乘后的零

    题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 示例 1:输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2:输入: 5 输出: 1 解释: 5! = 120, ...

  5. 172. 阶乘后的零。

    给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * - * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! = ...

  6. 【172. 阶乘后的零】

    来源:力扣(LeetCode) 描述: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: ...

  7. 【力扣】172. 阶乘后的零

    题目 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * - * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3 ...

  8. Leetcode题库 172.阶乘后的零(C实现)

    文章目录 思路 方法1 方法2 代码 方法1 方法2 思路 方法1 末尾每一个0都能看做是一个10 0的数量就转换成n!=123*-n形成的10的数量 每一个10可以看作是25 10的数量就转换成形成 ...

  9. 172. 阶乘后的零 尾随零

    原题如下: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 0 <= n <= 104 ...

最新文章

  1. QIIME 2教程. 16纵向和成对样本比较q2-longitudinal(2020.11)
  2. 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码
  3. centos7下kubernetes(18。kubernetes-健康检查)
  4. js导入,导出exel表格
  5. Spring整合JMS——基于ActiveMQ实现(一)
  6. Maven - 构建与命令
  7. 主内存和工作内存交互
  8. Node文件服务器(文件上传)
  9. 基于Java科研成果管理系统_基于Java的高校科研管理系统的设计与实现(含源文件).doc...
  10. java poi word转html 报错
  11. OCT-模拟电路设计八边形法则的探讨
  12. Mac怎么格式化U盘?Mac格式化fat32格式详解
  13. 3D Models (3D 模型)
  14. 计算机与软件开发法则
  15. Leetcode 307.区域检索-数组可修改
  16. 为什么A能ping通B,B不能ping通A?
  17. 旷视全新智能人像抓拍机:1080P高清视频格式,抓拍率不低于98%。
  18. MySQL,刷题之对视图操作,题+代码!!
  19. 超声波风速风向仪介绍
  20. 海南大学matlab试卷,信号与系统

热门文章

  1. sql 修改字段中部分值
  2. python画太极八卦图_「太极八卦图」使用HTML+CSS画太极八卦图 - seo实验室
  3. Ubuntu 命令行常见指令
  4. 轻松解决win10不能联网问题
  5. 华为 海思Balong招聘啦
  6. java春招面试冲刺系列:mysql基础知识超详细复习
  7. 从零基础到高级程序员需要走多久?
  8. 为什么要使用第三方物联网平台
  9. FDC2214 手势识别方案 以及设计大致流程
  10. 手机注册邮箱格式是什么?电子邮箱地址怎么填?