📢博客主页:https://blog.youkuaiyun.com/delaune
📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!
📢本文由 爱吃山竹的开心小迟 原创,转载请注明出处,首发于 🙉 优快云 🙉
作者的专栏:
👉专心致志读论文
👉Leetcode刷题日常
👉大学物理学习笔记
👉神经网络学习笔记
172.阶乘后的零
题目:给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示:0 <= n <=
思路:首先想到本题要求10的因子个数,10可以分解为2*5,然在阶乘中2明显要比5更多,故转化为求5的因子个数,即1到n的5的因子个数。
public int trailingZeroes(int n) {
int ans = 0;
for (int i = 5; i <= n; i += 5) {
int temp = i;
while (temp % 5 == 0) {
ans++;
temp /= 5;
}
}
return ans;
}
(递归解法):
5, 25, 125 ...中,因子5的个数逐级递增,所以我们可以设计 n/5 + n/25 + n/125的算法
public static int trailingZeroes(int n) {
if(n < 5){
return 0;
}
return n / 5 + trailingZeroes(n / 5);
}
题目:给你一个非负整数 num
,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
思路:(1)递归出口为n == 0时,返回0。
(2)当num为奇数时是由n - 1的状态走一步过来的。
(3)当num为偶数时是由n / 2走一步过来的。
int numberOfSteps(int num) {
if(num == 0){
return 0;
}
if(num % 2 == 1){
return numberOfSteps(num - 1) + 1;
}else{
return numberOfSteps(num / 2) + 1;
}
}