题目:

f(x) 是 x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 。

例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。
给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。

示例 1:

输入:k = 0
输出:5
解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。
示例 2:

输入:k = 5
输出:0
解释:没有匹配到这样的 x!,符合 k = 5 的条件。
示例 3:

输入: k = 3
输出: 5

提示:

0 <= k <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/preimage-size-of-factorial-zeroes-function
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

结果:

解题思路:

我一开始想要把乘积算出来,然后很快就发现天真了。。。

于是取看了题解,感谢题解中【爪哇缪斯】图解LeetCode 这篇图解,根据他的题解就真的能够明白为什么。——>大佬题解

简单说下题解中的思路:

首先我们要确定的是,乘积是否多一个0出来,取决于5 和 2 组合的个数,(至于为什么。。。我不知道,反正看看规律就是这样)。因为2出现的次数太多,不利于计算,这里用5计算。因此我们乘积中出现多少个0,完全取决于5的个数。

由此可以看出我们出现的5的个数就是0的个数。

然后5*5, 5*5 * 5这种5的次方的值,因为其本身的值会被5整除,这样可能会误导我们个数的计算,因此这部分需要单独拿出来算1个5.。

因此这题计算的k 如果存在一个 nums / 5 + nums / 25 + nums / 625 。。。的和,那就存在有k个0存在的场景。

最后,既然是一致计算5的个数,那就很容易明白,我们每5个数会多出至少1个0,所以我们返回的个数只可能是0 和 5.

最后注意:虽然不计算乘积,但是因为要和5做计算,会超出int范围!

代码:

// 由题解可以学习到,其实这道题就是求相乘的数字中出现5和5的倍数的个数
// 因此我们从start到end之间只需要保证5和5的倍数存在的个数和等于k存在那就存在5个。
int preimageSizeFZF(int k){long long start = 0;long long end = (long long)5 * k;while(start <= end) {long long sum = 0;long long num = 5;long long mid = (end - start)/2 + start;while (num <= mid) {sum += (mid / num); // 当前mid包含5的个数,5的倍数的个数的和。num *= 5;}if (sum == k) {// 说明5和5的倍数的个数之和为k,也就是可以存在有k个0存在的场景。return 5;} else if (sum < k) {start = mid + 1;} else {end = mid - 1;}}return 0;
}

C练题笔记之:Leetcode-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. LeetCode 793. 阶乘函数后K个零(二分查找)

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

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

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

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

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

  5. 文巾解题 793. 阶乘函数后 K 个零

    1 题目描述 2 解题思路 令 zeta(x) 为 x! 末尾零的个数.如果 x! 可以分解为素数的乘积,如的形式,那么 x! 末尾零的个数为 min(a, b) = b. zeta(x) 就是 x ...

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

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

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

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

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

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

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

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

最新文章

  1. iOS开发 - OC - block的详解 - 深入篇
  2. Go标准库Context
  3. 系统性能分析从入门到进阶
  4. python numpy Quickstart tutorial之ndarray创建
  5. JavaWeb【Velocity】
  6. 微信小程序做出 物流签收信息(步骤条) 源码
  7. java+ElementUI前后端分离旅游项目第二天 旅游管理和自由行
  8. 图像处理系列——图像融合之加权平均(WA)
  9. 安卓设备设置 orientation 最简单的方法
  10. 企业为何需要办公电话系统
  11. 关于win11右键的慢问题的建议
  12. Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)
  13. cin gt gt n是c语言中的什么,c++中cinna是什么意思
  14. JSESSIONID、SESSION、cookie
  15. 机器学习 数据集划分 训练集 验证集 测试集
  16. 程序员的发展之路一(转)
  17. java.nio.channels.UnresolvedAddressException: null [运行storm-0.9.4集群时]
  18. 简单网页制作代码 HTML+CSS+JavaScript香港美食(8页)
  19. brew-cask介绍
  20. 全球最大的已泄漏密码库现可公开访问下载:你的密码有人泄漏过吗?

热门文章

  1. flash 小游戏大全
  2. Fluent常见问题
  3. 2017腾讯暑期实习-产品经理二面(霸面)
  4. AEC-Q100和ISO26262 ASIL-B双重认证
  5. Android ROM定制
  6. 基于python的智能股票大数据预测可视化系统
  7. Pixel3 XL 刷Android原生系统,刷Magisk 进行ROOT
  8. 基于MATLAB的LPF低通滤波器设计(巴特沃斯)
  9. 软件架构设计的6个步骤及工作内容
  10. 无法打开模块文件“C:\Users\sq\AppData\Local\Temp\.NETFramework,Version=v4.5,AssemblyAttributes.vb”:系统找不到指定的文件