前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >☆打卡算法☆LeetCode 172. 阶乘后的零 算法解析

☆打卡算法☆LeetCode 172. 阶乘后的零 算法解析

作者头像
恬静的小魔龙
发布2022-08-07 10:46:47
2820
发布2022-08-07 10:46:47
举报
文章被收录于专栏:Unity3DUnity3D
大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

一、题目

1、算法题目

“给定一个整数n,返回n!结果中尾随零的数量。”

题目链接:

来源:力扣(LeetCode)

链接: 172. 阶乘后的零 - 力扣(LeetCode)

2、题目描述

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

代码语言:javascript
复制
示例 1:
输入: n = 3
输出: 0
解释: 3! = 6 ,不含尾随 0
代码语言:javascript
复制
示例 2:
输入: n = 5
输出: 1
解释: 5! = 120 ,有一个尾随 0

二、解题

1、思路分析

这道题要求n!结果中尾随零的数量。

那么先求n!的结果,n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1。

求n!的结构其实就是求阶乘的记过,从1到n的连续数相乘的积,叫做阶乘,用符号n!表示。如5!=1×2×3×4×5。规定0!=1。

对于任意一个n!来说,其尾随零的个数是展开式中10的个数决定的,那么求n!尾零的数量就是求n!中因子10的个数,因为10=5X2,那么还可以转化为求n!中质因子2和质因子5的个数的较小值。

由于质因子5的个数不会大于质因子2的个数,所以可以只考虑质因子5,而n!的质因子5的个数等于[1,n]中每个数的质因子5的个数之和,所以可以遍历[1,n]中所有5的倍数求出。

2、代码实现

代码参考:

代码语言:javascript
复制
class Solution {
    public int trailingZeroes(int n) {
        int ans = 0;
        for (int i = 5; i <= n; i += 5) {
            for (int x = i; x % 5 == 0; x /= 5) {
                ++ans;
            }
        }
        return ans;
    }
}
image.png
image.png

3、时间复杂度

时间复杂度:O(n)

n!中的质因子5的个数为O(n),因此时间复杂度为O(n)。

空间复杂度:O(1)

只需要常量级的空间。

三、总结

末尾0其实是任意正整数乘以10产生的,也就是说因子中每出现一个2和一个5,结果就会多一个末尾0。

显然连续数字的阶乘里,2的因子个数是远远多于5的因子个数的。

那么主要影响末尾0的个数其实是5的因子个数。

因此求出质因子5出现的次数就是题目要求的答案。


我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=29zkrho922xww

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
    • 1、算法题目
      • 2、题目描述
      • 二、解题
        • 1、思路分析
          • 2、代码实现
            • 3、时间复杂度
            • 三、总结
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档