LeetCode 793. 阶乘函数后K个零(二分查找)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 793. 阶乘函数后K个零(二分查找)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
f(x) 是 x! 末尾是0的數(shù)量。(回想一下 x! = 1 * 2 * 3 * ... * x,且0! = 1)
例如, f(3) = 0 ,因為3! = 6的末尾沒有0;而 f(11) = 2 ,因為11!= 39916800末端有2個0。給定 K,找出多少個非負整數(shù)x ,有 f(x) = K 的性質(zhì)。
示例 1: 輸入:K = 0 輸出:5 解釋: 0!, 1!, 2!, 3!, and 4! 均符合 K = 0 的條件。示例 2: 輸入:K = 5 輸出:0 解釋:沒有匹配到這樣的 x!,符合K = 5 的條件。注意: K是范圍在 [0, 10^9] 的整數(shù)。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/preimage-size-of-factorial-zeroes-function
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
程序員面試金典 - 面試題 16.05. 階乘尾數(shù)(5的因子)
2.1 二分查找
class Solution { public:int preimageSizeFZF(int K) {return binsearch(K+1)-binsearch(K);}int tail0count(long n)//計算尾0的個數(shù){int count = 0;while(n){count += n/5;n /= 5;}return count;}int binsearch(int K)//查找階乘有K個0的最小數(shù){long l = 0, r = 1e10, mid, count0;while(l < r){mid = l+((r-l)>>1);count0 = tail0count(mid);if(count0 < K)l = mid+1;else// if(count0 >= K)r = mid;}return l;} };2.2 數(shù)學(xué)解
階乘尾0個數(shù)跟因子5有關(guān),數(shù)字每增加5,尾0個數(shù)至少增加1,所以答案不是5個就是0個
參考題解區(qū):數(shù)學(xué)推導(dǎo)
總結(jié)
以上是生活随笔為你收集整理的LeetCode 793. 阶乘函数后K个零(二分查找)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1134. 阿姆斯特朗
- 下一篇: LeetCode 1427. 字符串的左