LeedCode 172. 阶乘后的零
一、内容
给定一个整数 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 <= 104
二、思路
- 首先最简单的办法是直接计算阶乘,但是由于数太大会导致溢出,那么我们可以用个小技巧,只保留末尾的几位数进行计算,因为前面的数并不会影响最末尾0的个数。
- 然后我们可以进行优化,我们发现在末尾增加一个0是由于数乘上了10 = 2 x 5, 那么每当一个阶乘黎曼出现了 2 x 5,末尾便会多上一个0,于是题目转化为求解2x5的对数。直观上分析,2的个数肯定是多于5的,那么我们只需要求解5的个数。如何快速求解呢,可以通过观察阶乘来发现规律。如 1 ∗ 2 ∗ 3 ∗ 4 ∗ ( 1 ∗ 5 ) ∗ . . . ∗ ( 2 ∗ 5 ) . . ∗ ( 3 ∗ 5 ) . . . ∗ ( 4 ∗ 5 ) . . . ∗ ( 1 ∗ 5 ∗ 5 ) . . . ∗ ( 6 ∗ 5 ) . . . ∗ ( 2 ∗ 5 ∗ 5 ) . . . 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 *5) .. * (3 *5) ... * (4 * 5)... * (1 * 5*5)... * (6 * 5) ... * (2 * 5 * 5)... 1∗2∗3∗4∗(1∗5)∗...∗(2∗5)..∗(3∗5)...∗(4∗5)...∗(1∗5∗5)...∗(6∗5)...∗(2∗5∗5)...
可以发现每5位数便会出现一个5,那么直接计算 n / 5 n/5 n/5就可以了,但是当n=25时,这时候又会多出现一个5,于是还要统计 n / 25 n /25 n/25, 同理可以发现125时又会多一个5,再加上一个 n / 125 n / 125 n/125, 这里可以使用递归来方便求解。
三、代码
- 直接计算阶乘
class Solution {public:int trailingZeroes(int n) {int ans = 0, last = 1;for (int i = 2; i <= n; i++) {last *= i;while (last % 10 == 0) {last /= 10;ans++;}last %= 100000;}return ans;}
};
- 计算因子5的个数
class Solution {public:int trailingZeroes(int n) {return n >= 5 ? n / 5 + trailingZeroes(n / 5) : 0;}
};
LeedCode 172. 阶乘后的零相关推荐
- 【LeetCode 172. 阶乘后的零】
LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...
- Leetcode 172. 阶乘后的零 解题思路及C++实现
解题思路: 找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意. class Solution { public ...
- 172. 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...
- 力扣172.阶乘后的零
题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 示例 1:输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2:输入: 5 输出: 1 解释: 5! = 120, ...
- 172. 阶乘后的零。
给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * - * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! = ...
- 【172. 阶乘后的零】
来源:力扣(LeetCode) 描述: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: ...
- 【力扣】172. 阶乘后的零
题目 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * - * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3 ...
- Leetcode题库 172.阶乘后的零(C实现)
文章目录 思路 方法1 方法2 代码 方法1 方法2 思路 方法1 末尾每一个0都能看做是一个10 0的数量就转换成n!=123*-n形成的10的数量 每一个10可以看作是25 10的数量就转换成形成 ...
- 172. 阶乘后的零 尾随零
原题如下: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 0 <= n <= 104 ...
最新文章
- QIIME 2教程. 16纵向和成对样本比较q2-longitudinal(2020.11)
- 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码
- centos7下kubernetes(18。kubernetes-健康检查)
- js导入,导出exel表格
- Spring整合JMS——基于ActiveMQ实现(一)
- Maven - 构建与命令
- 主内存和工作内存交互
- Node文件服务器(文件上传)
- 基于Java科研成果管理系统_基于Java的高校科研管理系统的设计与实现(含源文件).doc...
- java poi word转html 报错
- OCT-模拟电路设计八边形法则的探讨
- Mac怎么格式化U盘?Mac格式化fat32格式详解
- 3D Models (3D 模型)
- 计算机与软件开发法则
- Leetcode 307.区域检索-数组可修改
- 为什么A能ping通B,B不能ping通A?
- 旷视全新智能人像抓拍机:1080P高清视频格式,抓拍率不低于98%。
- MySQL,刷题之对视图操作,题+代码!!
- 超声波风速风向仪介绍
- 海南大学matlab试卷,信号与系统