1 题目描述

2 解题思路

令 zeta(x) 为 x! 末尾零的个数。如果 x! 可以分解为素数的乘积,如的形式,那么 x! 末尾零的个数为 min(a, b) = b。

zeta(x) 就是 x 除以 5 的次数之和,即 zeta(x) 等于

可以看出,zeta(x) 是一个单调递增函数,因此可以使用二分查找求解。

使用二分查找找出满足 zeta(x) = K 的最大 x 和最小 x

由于一定存在 zeta(5a-1) < zeta(5a) = zeta(5a+1) = zeta(5a+2) = zeta(5a+3) = zeta(5a+4) < zeta(5a+5),即如果存在某个 x 使得 zeta(x) = K,那么一定存在连续 5 个数的阶乘末尾零的个数都为 K;如果不存在这样的 x,那么阶乘末尾零的个数为 K 的数字只有 0 个。

class Solution(object):def preimageSizeFZF(self, K):def zeta(x):if(x==0):return 0else:return x//5 + zeta(x//5) lo, hi = 4*K, 5*K + 1while lo < hi:mi = (lo + hi) // 2zmi = zeta(mi)if zmi == K: return 5elif zmi < K: lo = mi + 1else: hi = mireturn 0
#最终没有找到这个数

接下来解释一下这边二分查找的时候的左边界和右边界是怎么找的:

我们可以得到

即x≥4k

即x≤5k

复杂度分析

时间复杂度:,二分查找的复杂度为 O(log K),其中每一步计算 zeta 的复杂度也为 O(logK)。

空间复杂度:O(logK),zeta 递归调用栈的大小。

文巾解题 793. 阶乘函数后 K 个零相关推荐

  1. Java实现 LeetCode 793 阶乘函数后K个零 (分析)

    793. 阶乘函数后K个零 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * - * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 ...

  2. 793. 阶乘函数后K个零 golang

    Me(AC 33 / 44 个通过测试用例) func preimageSizeFZF(K int) int {count := 0for i := 0; i < 1000000; i++ {i ...

  3. LeetCode 793. 阶乘函数后K个零(二分查找)

    1. 题目 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * ... * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 f(11) ...

  4. 小黑跟老黑们夜骑车拍完了毕业照面试了两场的leetcode之旅:793. 阶乘函数后 K 个零

    小黑代码 class Solution:def preimageSizeFZF(self, k: int) -> int:# 获取n的阶乘的0个数@lru_cachedef get_zero(n ...

  5. 365天挑战LeetCode1000题——Day 071 阶乘后的零 阶乘函数后 K 个零 最小栈 移除无效的括号

    172. 阶乘后的零 代码实现(自解) class Solution {public:int trailingZeroes(int n) {int ans = 0;while (n) {n /= 5; ...

  6. 力扣- -阶乘函数后K个零

    力扣- -阶乘函数后K个零 文章目录 力扣- -阶乘函数后K个零 一.172. 阶乘后的零 二.分析 三.代码 四.阶乘函数后K个零 五.分析 六.完整代码 一.172. 阶乘后的零 二.分析 求n! ...

  7. DS查找—折半查找求阶乘函数后K个零

    题目描述 f(x) 是 x! 末尾是 0 的数量,给定 K,找出多少个非负整数 x ,能满足 f(x) = K . (x! = 1 * 2 * 3 * - * x,且 0! = 1 ) 例如, f(3 ...

  8. 阶乘函数后K个零,详解

    题目: f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * - * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 f(11) = 2 ...

  9. C练题笔记之:Leetcode-793. 阶乘函数后 K 个零

    题目: f(x) 是 x! 末尾是 0 的数量.回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 . 例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 :而 ...

最新文章

  1. 域名跳转301-LAMP环境搭建
  2. CSS+HTML大白
  3. 实验一:JDK下载与安装、Eclipse下载与使用总结心得
  4. STM8学习笔记---串口uart1
  5. java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...
  6. Github 新学入门
  7. hdfs中一个block块默认多大?
  8. python字符串解析_Python-字符串解析-正则-re
  9. 使用VS2015编写C/C++开始步骤
  10. java jvm对象_Java对象在JVM中长啥样
  11. 装机 win7 64 IE11
  12. Android JNI作用及其详解
  13. 前端学习/ Day1/HTTP简单易懂/GET POST/HTTP特性/HTTP与HTTPS/HTTP版本演变/加解密数字签名数字证书
  14. qq群api协议,非官方协议,抓包获取的QQ群操作协议
  15. 一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
  16. c语言程序设计对称数,对称数 问题
  17. Android显示横幅样式通知
  18. 使用华为手机怎么从网上打印资料?
  19. 第7章 项目成本管理
  20. Linux根目录下各目录的作用

热门文章

  1. Python3中的内置函数
  2. mybatis association表关联与rowbounds共同使用时的异常及其解决方案
  3. SQL Server事务
  4. Spark SQL Catalyst源代码分析之TreeNode Library
  5. love2d教程3--输入和音乐
  6. php开发支持的文件类型整理
  7. 写在开年:移植wolfssl4.3.0到w60x_sdk_3.04时的一点问题
  8. PAT甲级1031 Hello World for U:[C++题解]模拟、数学运算
  9. 51Nod5105 子矩阵求和
  10. OpenCV实战中:blender-feed(img_warped_s, mask_warped, corners[img_idx]);这里有异常的处理方法