目录

  • 题目一:172、阶乘后的零
  • 题目二:793、阶乘后K个零

题目一:172、阶乘后的零

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

举一个栗子:6!=【 1 * 2 * 3 * 4 * 5 * 6 】

6!= 720

所以的话就是返回1,因为720 后面只有一个0

1、那么应该怎么做呢?

乍一看,感觉问题很复杂,其实只要冷静下来,一步一步简化,结果是十分明了的~

第一个想法:首先把阶乘算出来,然后从前到后每一位都遍历吗?

这个方法肯定是不可取的,复杂度太高了。

2、我们只需要简单分析一下

题目要求看 0 的数量 ,

1、末尾的0 是从哪里来的?

肯定是乘以 10 得来的!

2、10 是从哪里来的?

10 = 2 * 5;也就是说,10 只能从2 和5 相乘得到

只看 2 和 5 出现的次数,因为只有2 和 5 才会产生 10 ,才会有 0 的呀!

当然,这里要多说一嘴,0 就不要考虑了,因为 0!= 1 啊。

3、问题就做可以做第一次简化:

判断n!= 【1 * 2 * 3 * …… * n 】 中到底有多少个 2 和 5 的组合?

随后,我们继续分析,还可以继续优化;

10 从 2 * 5 中得到,单单一个 2 或者 一个 5 ,或者和其它组合,都是没法产出 10 的1、只有一个2 一个5 结合在一起才行

2、进一步,2多 5 少呢?5多 2 少呢?

自然是根据少的来嘛!

4、我们再举几个栗子分析
6!=【 1 * 2 * 3 * 4 * 5 * 6 】 6 = 2 * 3;

所以两个 2 ,一个5,于是一个10

10! =【 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10】

2 4 6 8 10 都可以出来2 ,一共七个2;5= 1 *5;10 = 2 * 5;

一共两个5;所以两个10

不难看出,2 的个数是 大于等于 5 的个数的;这也是我们第二次简化的依据

5、问题就做第二次简化:

判断 n!= 【1 * 2 * 3 * …… * n 】 中到底乘了多少个 5

这样一来,问题就简单很多了!

注意:问题到这里就分析完了吗?当然没有,我们还应该注意以下这样的数字:

10 = 2 * 5 贡献1个5
5 = 3 * 5 贡献1个5
25 = 5 * 5 贡献2个5
125 = 5 * 5 * 5 贡献3个5

以此类推~ 这些数字都是我们应该处理的

有了上述的分析和注意点,我们便可以写出代码了

class Solution {public:  int trailingZeroes(int n) {        int count = 0;       while(n >= 5) {           count += n / 5;           n /= 5;      }       return count;    }
};

题目二:793、阶乘后K个零

1、题目描述给你一个数字 k ,找出有多少个非负整数 n,使得 n! 后方,有k个0注意: k 是范围在 [0,10^9]的整数

说实话这个题有一点数学了,但是依旧是那一个解题步骤逐步分析!简化!

简单分析:通过上一题,我们可以知道,只有10的倍数,才会有0每有一对2和5的组合,n! 后面就会多一个0而 n!展开中,2个数比5个数多问题就转化为 n! 有多少个 5 作为因子

既得: n 的阶乘末尾 0 的个数 为:k;

满足公式:k = n/5 + n/5^2 + n/5^3 + ……

根据条件: k 是范围在 [0,10^9]的整数

得到:n < 5 *10^9

2、n 每+5,阶乘就会至少多乘一个5,末尾就会至少多一个0

有解,那就是5个,如果无解就是0个!

只有这两个情况!

n可以取这么大的数?该如何解题呢?

3、二分法 降维打击!

力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零;相关推荐

  1. LeetCode 第 59 场力扣夜喵双周赛(最短路径数+迪杰斯特拉、动态规划+最长公共前缀问题) / 第255场周赛(二进制转换,分组背包,子集还原数组(脑筋急转弯))

    第 59 场力扣夜喵双周赛 两道400多五百,后两道都写出代码来了,但是都有问题,哭辽- 还有刚开始第一道测试好慢,搞心态了 5834. 使用特殊打字机键入单词的最少时间 有一个特殊打字机,它由一个 ...

  2. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

  3. 【LeetCode 172. 阶乘后的零】

    LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...

  4. 【Leetcode - 172】阶乘后的零(思维)

    给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! ...

  5. 力扣1006笨阶乘问题

    这里写目录标题 问题描述 常规解法 优化解法 问题描述 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 ...

  6. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  7. 力扣(LeetCode)刷题,简单题(第7期)

    目录 第1题:剪绳子1 第2题:Excel表列序号 第3题:阶乘后的零 第4题:位1的个数 第5题:快乐数 第6题:颠倒二进制 第7题:字符串压缩 第8题:丑数 第9题:有效的字母异位词 第10题:各 ...

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

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

  9. 力扣(LeetCode)刷题,简单题(第24期)

    目录 第1题:两个列表的最小索引总和 第2题:反转字符串中的元音字母 第3题:整数反转 第4题:将有序数组转换为二叉搜索树 第5题:第N个泰波那契数 第6题:数组序号转换 第7题:质数排序 第8题:日 ...

最新文章

  1. 文本分类入门(七)相关概念总结
  2. MongoDB- 简单操作命令
  3. 灵魂拷问!一起刷完了这份1307页的安卓面试宝典吧,不吃透都对不起自己
  4. 5848. 树上的操作
  5. 【JSP】jsp报错:Syntax error, insert } to complete MethodBody
  6. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(6) - 移位与循环移位指令
  7. python软件下载安装百度网盘-Python自动化测试视频教程【百度云盘下载】
  8. UDP网络编程-广播
  9. cdr如何制作图表?
  10. vs2010开发android教程,用Visual Studio 2010开发Android应用
  11. Java中打印数组的几种方法
  12. 1.spring入门 - spring实战第五版
  13. 手动编译源代码安装wget
  14. 金蝶K3系统上机日志如何清除
  15. Python 每日一记31相关性矩阵建立
  16. 若依代码生成使用教程
  17. Unity IOS 微信SDK 记录
  18. 百度笔试题——首相的密道
  19. 海螺环保上市破发:收盘市值178亿港元 由海螺创业分拆
  20. 13种最为荒谬的编程语言

热门文章

  1. 序列密码体制——密码学笔记(三)
  2. 疯狂打地鼠游戏核心代码(鼠标变锤子)
  3. Android实现文件下载并自动安装apk包
  4. Andorid应用去google广告
  5. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
  6. Python多线程——递归锁RLOCK
  7. C语言易错题集 第三部
  8. golang使用iota
  9. Linux之eval命令使用
  10. MySQL中的用户管理