[编号][1][刷题][LeetCode][脑筋急转弯][中等][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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的思路:统计尾部0的个数->如果有则个位不能为0->个位不能为0则判断什么时候个位不为0:4!=24,5!=120,6!=120*6,7!=120*6*7....10!=120*6*7*8*9*10=6*7*8个1200 ->得出结论,其余乘值不会影响末尾的0,而每出现一个10就会多一个0
所以我需要知道有多少个10->又因为10=2*5,所以需要知道有多少个2*5,2的个数足够多,所以只需要统计5的个数即末尾0的个数。(查看解答,还不错符合标准答案。脑机急转弯真麻烦)
答案代码:
class Solution { public: int trailingZeroes(int n) { int ans = 0; for (int i = 5; i <= n; i += 5) { for (int x = i; x % 5 == 0; x /= 5) { ++ans; } } return ans; } };
复杂度分析
-
时间复杂度:O(n)。n! 中因子 5 的个数为 O(n)
-
空间复杂度:O(1)。
Leetcode官方列式计算:我看的时候,我草..
换一个角度考虑 [1,n] 中质因子 p的个数。[1,n] 中 p 的倍数有 n1=⌊n/p⌋ 个,这些数至少贡献出了 n1个质因子 p。p^2的倍数有 n2=⌊ n/p^2 ⌋ 个,由于这些数已经是 p 的倍数了,为了不重复统计 p 的个数,我们仅考虑额外贡献的质因子个数,即这些数额外贡献了至少 n2 个质因子 p。依此类推,[1,n] 中质因子 p 的个数为k=1∑∞⌊n/p^k⌋
class Solution { public: int trailingZeroes(int n) { int ans = 0; while (n) { n /= 5; ans += n; } return ans; } }; 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes/solution/jie-cheng-hou-de-ling-by-leetcode-soluti-1egk/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。View Code
总结
分析问题的时候需要细化问题,为了更好的解决可以进行列式解决问题。
标签:10,int,个数,LeetCode,120,因子,ans,阶乘,172 来源: https://www.cnblogs.com/MC5522/p/16057186.html