日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零; 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

        • 題目一:172、階乘后的零
        • 題目二:793、階乘后K個零

題目一:172、階乘后的零

給定一個整數(shù) n,返回 n! 結(jié)果中,尾數(shù)中零的數(shù)量

舉一個栗子:6!=【 1 * 2 * 3 * 4 * 5 * 6 】

6!= 720

所以的話就是返回1,因為720 后面只有一個0

1、那么應該怎么做呢?

乍一看,感覺問題很復雜,其實只要冷靜下來,一步一步簡化,結(jié)果是十分明了的~

第一個想法:首先把階乘算出來,然后從前到后每一位都遍歷嗎?

這個方法肯定是不可取的,復雜度太高了。

2、我們只需要簡單分析一下

題目要求看 0 的數(shù)量 ,

1、末尾的0 是從哪里來的?

肯定是乘以 10 得來的!

2、10 是從哪里來的?

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

只看 2 和 5 出現(xiàn)的次數(shù),因為只有2 和 5 才會產(chǎn)生 10 ,才會有 0 的呀!

當然,這里要多說一嘴,0 就不要考慮了,因為 0!= 1 啊。

3、問題就做可以做第一次簡化:

判斷n!= 【1 * 2 * 3 * …… * n 】 中到底有多少個 2 和 5 的組合?

隨后,我們繼續(xù)分析,還可以繼續(xù)優(yōu)化;

10 從 2 * 5 中得到,單單一個 2 或者 一個 5 ,或者和其它組合,都是沒法產(chǎn)出 10 的1、只有一個2 一個5 結(jié)合在一起才行

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

自然是根據(jù)少的來嘛!

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 的個數(shù)是 大于等于 5 的個數(shù)的;這也是我們第二次簡化的依據(jù)

5、問題就做第二次簡化:

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

這樣一來,問題就簡單很多了!

注意:問題到這里就分析完了嗎?當然沒有,我們還應該注意以下這樣的數(shù)字:

10 = 2 * 5 貢獻1個5
5 = 3 * 5 貢獻1個5
25 = 5 * 5 貢獻2個5
125 = 5 * 5 * 5 貢獻3個5

以此類推~ 這些數(shù)字都是我們應該處理的

有了上述的分析和注意點,我們便可以寫出代碼了

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

題目二:793、階乘后K個零

1、題目描述給你一個數(shù)字 k ,找出有多少個非負整數(shù) n,使得 n! 后方,有k個0注意: k 是范圍在 [0,10^9]的整數(shù)

說實話這個題有一點數(shù)學了,但是依舊是那一個解題步驟逐步分析!簡化!

簡單分析:通過上一題,我們可以知道,只有10的倍數(shù),才會有0每有一對2和5的組合,n! 后面就會多一個0而 n!展開中,2個數(shù)比5個數(shù)多問題就轉(zhuǎn)化為 n! 有多少個 5 作為因子

既得: n 的階乘末尾 0 的個數(shù) 為:k;

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

根據(jù)條件: k 是范圍在 [0,10^9]的整數(shù)

得到:n < 5 *10^9

2、n 每+5,階乘就會至少多乘一個5,末尾就會至少多一個0

有解,那就是5個,如果無解就是0個!

只有這兩個情況!

n可以取這么大的數(shù)?該如何解題呢?

3、二分法 降維打擊!

總結(jié)

以上是生活随笔為你收集整理的力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零;的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。