LeetCode算法题-Factorial Trailing Zeroes(Java实现)

java 求任意一个正数的阶乘 java 求任意一个正数的阶乘 java 求任意一个正数的阶乘 立即下载

这是悦乐书的第183次更新,第185篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第42题(顺位题号是172)。给定一个整数n,返回n!中的尾随零数。例如:

输入:3
输出:0
说明:3! = 6,没有尾随零。

输入:5
输出:1
说明:5! = 120,一个尾随零。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:当n小于等于0的时候,直接返回0。

先把n的阶乘算出来,再转为字符串,接着从字符串的最后一位往前遍历找0出现的次数,没有碰到0就就结束循环。为了避免计算阶乘溢出,使用BigInteger来做计算,借助其multiply方法。

public int trailingZeroes(int n) {
        int result = 0;
        if (n <= 0) {
            return result;
        }
        BigInteger num = new BigInteger("1");
        for (long i=1; i <= n; i++) {
            num = num.multiply(new BigInteger(i+""));
        }
        String str = num + "";
        if (str.lastIndexOf("0") != -1) {
            for (int j = str.length(); j > 0; j--) {
                if ("0".equals(str.substring(j-1, j))) {
                    result++;
                } else {
                    break;
                }
            }
        }
        return result;
}

此解法是一种思路,但是不推荐这么做,时间复杂度是O(n),空间复杂度是0(n)。

03 第二种解法

要判断n做完阶乘后的整数带几个0,可以反过来思考,尾数0可以由那些数相乘得到?0可以由10的倍数来得到,但是n的阶乘我们不能单独判断10出现的次数,还要继续分解,10是2乘以5的结果,任意一个正整数的阶乘,2出现的次数肯定多于5出现的次数,那就计算5出现的次数,到此是否就完了?还没有,因为有些数字自身就是带5的,比如25,125之类的,最后可以归纳成f(n)=n/5 + f(n/5),可以使用递归,也可以使用循环结构。

这是递归的解法。

public int trailingZeroes2(int n) {
    if (n<5) return 0;
    if (n<10) return 1;
    return n/5 + trailingZeroes2(n/5);
}

这是使用循环结构的解法。

public int trailingZeroes3(int n) {
    int result = 0;
    while (n>0) {
        result += n/5;
        n /= 5;
    }
    return result;
}

还有更加疯狂的,一行代码搞定。

public int trailingZeroes4(int n) {
    return n == 0 ? 0 : n/5 + trailingZeroes4(n/5);
}

04 小结

算法专题目前已连续日更超过一个月,算法题文章42+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南:从硬件设计到软件配置 本文提供了一份详细的基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南。内容涵盖从核心硬件选型(如ESP32-S3主控与PCM5102 DAC芯片)、四路独立LDO供电设计,到软件环境配置、固件烧录及常见问题调试的全过程,旨在帮助创客打造一台支持网络电台、本地播放与蓝牙连接的高保真音频播放器。 阅读详情

相关推荐

自动化测试-自愈技术

随着人工智能的发展,作为一名软件测试工程师,相信大家都会思考如何把这一前沿技术引入到我们的自动化测试当中,想一万遍不如做一遍。,传递当前页面状态,获取之前成功的定位器路径,比较它们,并生成修复的定位器列表。如果修复成功,我们可以使用 Healenium Idea 插件更新我们的自动化测试代码:插件使用修复定位器寻找修复和更新测试代码。的旧定位器去定位按钮的时候,脚本就会报错,提示 “NoSuchElement”的错误异常。现在,我们假设开发人员变更了应用程序的UI界面,改变了这个按钮的id属性,从。

qq_58223744的博客 2661

LeetCode算法题 : 阶乘后的零trailingZeroes

给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。 思路: 一个数的最后有多少个0,可以化简为x*10^k。 10^k又可以化简为 2^k与 5^k 其中x中可以再分解为多...

Mike的博客 199

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 713

java递归算法求n的阶乘(n>1,n是正整数)

/** * 递归算法计算n的阶乘 * 递归:自己调自己 * @param n * @return */ public static Integer jieCheng(Integer n) { if (n &lt; 0) { return 0; } if (n == 1) { return 1; } return n ...

wangsaisoon的博客 6758

A2B音频总线在智能座舱中的应用

车载A2B链路音频是智能座舱的核心功能,涵盖车载音响、语音识别、e-Call、消噪及回声消除等应用,随着汽车智能网联化的发展,对音频的开发要求也越来越高,需要加入更先进、功能丰富的信息娱乐功能以满足消费者的用户体验。但传统的模拟并行音频信号传输方式,难以在功能增加与整车轻量化(线缆的重量及成本减少)之间取得均衡。这时候就需要A2B音频总线了。A2B音频总线用于连接车辆中的音频设备,如麦克风(MIC)、功放(AMP)、多媒体主机(Head Unit)和T-BOX等。通过一条低成本的非屏蔽双绞线UTP,进行跨距

怿星科技的博客 3937

ubuntu通过qemu安装银河麒麟V10_Arm_v8 (kylin_v10_飞腾/鲲鹏版)

一、windows下安装vmware虚拟机 二、ubuntu下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.3-live-server-amd64.iso 三、vmware中新建虚拟机,并使用ubuntu-20.04.3-live-server-amd64.iso作为启用盘 。。。在虚拟机中安装ubuntu(略) 四、配置ssh(如果ssh登录不上时配置) 修改openssh的配置 vi /etc/s

u010533742的博客 8706

Java:算法 - 求正整数阶乘n!

数学公式:n!=1 * 2 * 3…(n-2) * (n-1) * n 应用方面:伽玛函数与排列组合 递归实现代码: public static long fac(int n){ if(n == 0 || n ==1) return 1; else return n*fac(n-1); } 分析:n &amp;gt; 1时,该函数每...

OliverZang的博客 1354

若依ruoyi框架实现单点登录或者接入统一认证

log.info("单点登录用户[{}]不存在, 需要创建.", loginName);log.info("单点登录用户[{}]已存在.", loginName);jsonObjectData.put("nickName","单点1");if (code.equals("0")) {//验证成功需要自动登录。jsonObject.put("msg","验证成功");ajax.put("msg", "登录成功");

GitHub质检员 2万+

LeetCode172——Factorial Trailing Zeroes

LeetCode172——Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!.Note: Your solution should be in logarithmic time complexity.难度系数:容易题目大意:给定一个整数n,返回n!的末尾0的个数,要求对数

fh09102103的专栏 475

Keras神经网络可视化模块keras.utils.visualize_util的安装配置方法

本文介绍了如何安装和配置keras.utils.visualize_util模块,并提供了一个简单的示例演示如何使用该模块来可视化神经网络的结构。在上述代码中,我们首先定义了一个简单的神经网络模型,该模型具有一个输入层、一个隐藏层和一个输出层,其中隐藏层具有512个神经元,输出层具有10个神经元。运行上述代码后,我们将在当前工作目录下找到一个名为model.png的文件,它显示了神经网络的结构图。这种方式有效地展示了整个过程,让我们能够更好地理解神经网络的结构,方便对其进行改进和调试。

. 893

FineReport FCP模拟题五

新建决策报表,设置 移动端 格式,采用绝对布局。数据来源:FRDemo中的订单表/雇员表。

Davina_yu的博客 725

LeetCode 172. Factorial Trailing Zeroes

LeetCode 172. Factorial Trailing Zeroes 问题来源LeetCode 172. Factorial Trailing Zeroes 问题描述 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logari

yanqinghe123的专栏 314

AI算力网络与通信领域QoS保障的测试方法

在当今数字化时代,AI技术蓬勃发展,AI算力网络应运而生。它将分布在不同地理位置的算力资源进行整合,以高效地支持各种AI应用,如深度学习训练、智能图像识别等。而通信领域则是信息传输的基石,确保数据能够准确、快速地在不同节点之间传递。QoS保障在通信领域至关重要,它可以确保不同类型的业务(如语音通话、视频会议、在线游戏等)获得与其需求相匹配的服务质量。在AI算力网络中,QoS保障同样不可或缺,因为AI任务对网络的带宽、延迟、可靠性等指标有严格要求。

AI算力网络与通信的博客 529

leetcode 172: Factorial Trailing Zeroes

Factorial Trailing Zeroes Total Accepted: 28 Total Submissions: 69 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in polynomial time complexity.

西施豆腐渣 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode-172. Factorial Trailing Zeroes [C++][Java]

Given an integern, returnthe number of trailing zeroes inn!.

贫道绝缘子的博客 5043

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Leetcode【172】Factorial Trailing Zeroes(Java版)

1、这道题如果用常规的思路,就要先求出阶乘的结果,这显然是不现实的,不是因为计算量大会超时,而是会溢出 2、即使你求出了阶乘,还要注意的是题目问的是尾数中0的个数,举个栗子,7的阶乘是5040,尾数中0的个数是1 3、那不能算出阶乘的结果,只能找规律了,如果需要产生零,阶乘中的数需要包含 2 和 5 这两个因子,譬如10 = 2 * 5, 假设n=5,5!= 1 * 2 * 3 * 4 *...

ssjdoudou的博客 7149

leetcode 之Factorial Trailing Zeroes

这道题用到的数字的知识。判断结果有多少个0,就是多少个10,而10=2×5,所以就是判断有min(2的个数,5的个数)。因为是求阶乘,只要有5,就意味着有4和2,所以2的个数是多于5个的,也就是说,5的个数决定了算出的结果有多少个0.(1)C语言实现int trailingZeroes(int n) {    if(n==0)        return 0;    return n/5+trai...

代码草根的专栏 291

【LeetCode】172. Factorial Trailing Zeroes 阶乘后的零(Easy)(JAVA)

【LeetCode】172. Factorial Trailing Zeroes 阶乘后的零(Easy)(JAVA) 题目地址: https://leetcode.com/problems/factorial-trailing-zeroes/ 题目描述: Given an integer n, return the number of trailing zeroes in n!. Follow up: Could you write a solution that works in logarit

qq_16927853的博客 214

leetcode172_Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!. Example 1: Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero. Example 2: Input: 5 Output: 1 Explanation: 5! = 120, one trai...

lilililililydia的博客 280

Factorial Trailing Zeroes

题目描述 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. 文章出处:https://oj.leetcode.com/problems/factorial-trailing-zeroes/

ych4513979的专栏 369

leetcode Factorial Trailing Zeroes题解

题目描述: Given an integer n, return the number of trailing zeroes in n!. Example 1: Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero. Example 2: Input: 5 Output: 1 Explanation: 5! = 120, o...

leo_weile的博客 203

LeetCode Factorial Trailing Zeroes

原题链接在这里:https://leetcode.com/problems/factorial-trailing-zeroes/ 求factorial后结尾有多少个0,就是求有多少个2和5的配对。 但是2比5多了很多,所以就是求5得个数。但是有的5是叠加起来的比如 25,125是5的幂数,所以就要降幂。 e.g. n = 100, n/5 =20, n/25= 4, n/125=0,所以加起

Dylan_Java_NYC的博客 378

172. Factorial Trailing Zeroes

172.Factorial Trailing Zeroes Given an integern, return the number of trailing zeroes inn!. Example 1: Input: 3 Output: 0 Explanation:3! = 6, no trailing zero. Example 2: Input: 5 Out...

TZJ0709的博客 130

LeetCode Factorial Trailing Zeroes, Excel Sheet Column Number

Factorial Trailing Zeroes 题意:给一个数n,问n!的末尾有几个0 第一反应是0只有2、5相遇能出一个0,所以n有几个5的倍数似乎就是答案了。 (n!有k个5,肯定有k个2,能凑出相对应的0) 但是如果是像25的怎么办?他能凑出100,两个0,;所以前面单单5的倍数不够,还应该是5^i,将这个i加起来。 代码如下: public class Solution {

miss_snow_m的专栏 980

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

172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量。 LeetCode172. Factorial Trailing Zeroes 示例 1: 输入: 3 输出: 0 解释: 3! = 6,尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! = 120,尾数中有 1 个零。 说明: 你算法的时...

weixin_30834019的博客 124

LeetCode -- Factorial Trailing Zeroes

LeetCode -- Factorial Trailing Zeroes

我的英文站点:https://iorilan.medium.com/ 1602
上一篇: LeetCode算法题-Excel Sheet Column Number(Java实现)
下一篇: LeetCode算法题-Rotate Array(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值