开源地址:点击该链接


题目描述

https://leetcode-cn.com/problems/factorial-trailing-zeroes
给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。 示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零. 说明:
你算法的时间复杂度应为O(logn)。

解题思路

最直接的解法就是先求出 n! 等于多少
然后计算尾数中零的数量,该方法的复杂度为 O(n)
如果想实现复杂度为 O(logn)
必须另想方法,既然我们要计算尾数中的零的个数
等价于我们要计算 n! 中含有多少个 10 这个因子
再进一步的说,10 = 2 * 5,这两个因子已无法再分解了
原问题再次等价于计算 n! 中含有多少对 (2, 5) 因子
很显然,在 n! = 1*2*3*4*5*6*...*(n-1)*n 中
2 这个因子出现的次数肯定 >= 5 出现的次数
故原问题又等价于计算 n! 中因子 5 出现的次数
而所有可能出现在含有 5 的数如下:
5^1, 5^2, 5^3, 5^4, 5^5..., 5^max_exp
所以该题的解就是计算如下结果:
(n/5^1 + n/5^2 + n/5^3 + n/5^4 + n/5^5 + ... + n/5^max_exp)

示例代码

class Solution {
public:
int trailingZeroes(int n) {
int max_exp = log(n) / log(5);
int res = 0; for (int i=0; i<max_exp; i++) {
int temp = n / 5;
res += temp;
n = temp;
} return res;
}
};

【每天一题】LeetCode 172. 阶乘后的零的更多相关文章

  1. LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)

    172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...

  2. Java实现 LeetCode 172 阶乘后的零

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

  3. Leetcode 172.阶乘后的零

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

  4. leetcode刷题笔记172 阶乘后的零

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

  5. 172. 阶乘后的零 Java解法

    https://leetcode-cn.com/problems/factorial-trailing-zeroes/ 172. 阶乘后的零 这题要完成其实要知道一个很巧妙的思想,就是阶乘里面,后面的 ...

  6. 每日一道 LeetCode (41):阶乘后的零

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  7. LeetCode 172:阶乘后的零

    给定一个整数 n, 返回 n! 结果中尾数为零的数量. 示例 : 输入: 输出: 解释: ! = , 尾数中没有零. 示例 : 输入: 输出: 解释: ! = , 尾数中有个零. 说明:算法的时间复杂 ...

  8. 【leetcode 简单】第四十二题 阶乘后的零

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

  9. 172 Factorial Trailing Zeroes 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量.注意: 你的解决方案应为对数时间复杂度. 详见:https://leetcode.com/problems/factorial-trailing-ze ...

随机推荐

  1. 1sql

    ------------------ MySQL 服务-- sudo service mysql start/stop/restart/status ------------------ 数据库相关的 ...

  2. php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm进程管理

    6月13日任务 12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理 12.21 php-fpm的pool p ...

  3. Linux入侵痕迹检测方案【华为云技术分享】

    背景说明 扫描是一切入侵的基础,通过扫描来发现目标主机是否为活动主机.操作系统是什么版本.开放了哪些服务等.扫描技术纷繁复杂,新的扫描技术也层出不穷,不可能穷举所有扫描技术,下面按入侵步骤对主机扫描. ...

  4. 如何使用pandas分析金融数据

    [摘要]pandas是数据分析师分析数据最常用的三方库之一,结合matplotlib,非常强大. 首先我们收集一些数据. 从东方财富客户端导出券商信托板块2018年11月1日的基础行情和财务数据.分别 ...

  5. Java 基于Spire.Cloud.Excel 将Excel转为PDF

    Spire.Cloud.Excel Sdk 提供GeneralApi接口和WorkbookApi接口,支持将本地Excel和云端Excel文档转换为ODS, PDF, XPS, PCL, PS等格式. ...

  6. Python协程与Go协程的区别二

    写在前面 世界是复杂的,每一种思想都是为了解决某些现实问题而简化成的模型,想解决就得先面对,面对就需要选择角度,角度决定了模型的质量, 喜欢此UP主汤质看本质的哲学科普,其中简洁又不失细节的介绍了人类 ...

  7. luogu P3572 [POI2014]PTA-Little Bird

    题目描述 从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力 单调队列优化动态规划 #include<cstdio> #include&l ...

  8. java之扩展运算符

    java中的扩展运算符为+=.-=./=.%=.*= 当使用扩展运算符时,变量在参与赋值运算时会把结果自动强制转换为当前变量的类型,比如: public class Test{ public stat ...

  9. Prometheus笔记(一)metric type

    欢迎加入go语言学习交流群 636728449 Prometheus笔记(二)监控go项目实时给grafana展示 Prometheus笔记(一)metric type 文章目录 Prometheus ...

  10. Python字符串学习

    Python字符串(不可变的): 一.相关的运算: 1.字符串的拼接: str = str1 + str2 2.字符串的重复: print(str * 3) 3.下标访问字符串某个字符: str[1] ...