当前位置: 首页 > news >正文

力扣经典算法篇-46-阶乘后的零(正向步长遍历,逆向步长遍历)

1、题干

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

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

示例 1:
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0

示例 2:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0

示例 3:
输入:n = 0
输出:0

提示:
0 <= n <= 10^4

2、解题

题目要求对n的阶乘结果,校验末尾0的个数。
首先题目给定了n的范围在0-10000之间。我们一定不能上来计算阶乘和,因为在Java中int的最大值是2147483647即2的31次方-1,最多能计算12的阶乘;long的范围是9223372036854775807(2^63-1),最大只能计算到20的阶乘,很显然求阶乘和的方式不可取。

只能根据数字的特征去求解
第一种情况,如果末尾是0,那就末尾0的个数就加1,但是要注意100这种末尾有2个0,1000有3个0的情况。
第二种情况,如果能被5整除,那么必然也能早晨末尾为0的情况;但是也要注意25这种55的情况,因为254*2=200,末尾会产生2个0;同理125的这种,末尾会产生3个0。

方法一:(逆向遍历)

从n开始向1进行遍历,在满足条件的情况下计算结果。

代码示例:

public class Test52 {public static int trailingZeroes(int n) {int result = 0;if (n == 0) {return result;}while (n > 4) {   // 至少为5才可能在末尾产生0int temp = n;    boolean flag = false;    // 记录当前元素是否为5或10,这样可以使用5的步长递减,减速遍历,提高效率while (temp % 10 == 0) {   // 要使用while,防止100的情况result++;temp = temp / 10;flag = true;}while (temp % 5 == 0) {      // 使用while防止25会造成末尾2个0的情况result++;temp = temp / 5;flag = true;}if (flag) {   // 本次为10或者5,指定5的步长递减n = n - 5;} else {n--;}}return result;}public static void main(String[] args) {int n = 30;System.out.println(trailingZeroes(n));}
}

方法一:(正向遍历)

从5到n正向遍历,在满足不超过n的条件下计算结果。

代码示例:

public int trailingZeroes(int n) {int ans = 0;for (int i = 5; i <= n; i += 5) {       // 指定初始5开始,每次增加5,且计算值不能超过nfor (int x = i; x % 5 == 0; x /= 5) {    // 防止100或25这种情况++ans;}}return ans;}

向阳前行,Dare To Be!!!

http://www.lryc.cn/news/613479.html

相关文章:

  • Linux Shell为文件添加BOM并自动转换为unix格式
  • 数据分析——Pandas库
  • 什么是 TDengine IDMP?
  • 机试备考笔记 7/31
  • 学习设计模式《二十一》——装饰模式
  • 人生后半场:从广度到深度的精进之路
  • 设计模式中的行为模式
  • 多线程 future.get()的线程阻塞是什么意思?
  • tcpdump问题记录
  • 【多重BFS】Monsters
  • 【实时Linux实战系列】基于实时Linux的高频交易系统构建
  • 【C语言】深入理解编译与链接过程
  • 数据标注之数据集的类型与如何标注
  • 时间并非维度:论其作为空间变化的转换系数
  • 大模型LL04 微调prompt-Tuning方法入门(背景与发展)
  • 深度学习的视觉惯性里程计(VIO)算法优化实践
  • 数据结构学习之二叉树
  • 深度学习(2):自动微分
  • LSTM 单变量时序预测—pytorch
  • JAVA第六学:数组的使用
  • 【数据结构】二叉树练习
  • S7-1200 串行通信介绍
  • 一场 Dark Theme A/B 测试的复盘与提效实践
  • Linux上MySql CPU 占用异常
  • SpringBoot中的单例注入方式
  • windows有一个企业微信安装包,脚本执行并安装到d盘。
  • VSCode ssh一直在Setting up SSH Host xxx: Copying VS Code Server to host with scp等待
  • 开发避坑指南(20) :MyBatis操作Oracle插入NULL值异常“无效列类型1111“解决方案
  • DrissionPage实战案例:小红书旅游数据爬取
  • TDengine IDMP 文档介绍