本文主要是介绍LeetCode 面试题 16.05. 阶乘尾数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、题目
- 二、C# 题解
一、题目
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n)
。
点击此处跳转题目。
二、C# 题解
每隔 5 个数就会出现一个 5,每隔 25 个数会出现 一个 25, 每隔 125 个数会出现一个 125…
n ! = 1 × 2 × 3 × 4 × ( 1 × 5 ) × ⋯ × ( 2 × 5 ) × ⋯ × ( 3 × 5 ) … n! = 1 \times 2 \times 3 \times 4 \times (1 \times 5) \times \dots \times (2 \times 5) \times \dots \times (3 \times 5) \dots n!=1×2×3×4×(1×5)×⋯×(2×5)×⋯×(3×5)…
因此只需要计算 ans = n / 5 + n / 25 + n / 125 + …
public class Solution {public int TrailingZeroes(int n) {if (n == 0) return 0;return n / 5 + TrailingZeroes(n / 5);}
}
- 时间:20 ms,击败 100.00% 使用 C# 的用户
- 内存:25.37 MB,击败 100.00% 使用 C# 的用户
也可以不使用递归求解:
public class Solution {public int TrailingZeroes(int n) {int ans = 0;while (n != 0) {n /= 5;ans += n;}return ans;}
}
这篇关于LeetCode 面试题 16.05. 阶乘尾数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!