題目
解析
這道題的要求是計(jì)算n的階乘后面0的個(gè)數(shù)褪尝,而且要求算法時(shí)間復(fù)雜度為logn玖绿,那么就絕對(duì)不是要人傻傻地做一遍階乘再去做。
思考一下学赛,什么時(shí)候末尾才會(huì)出現(xiàn)0年堆,我們知道只有25,或者n10的時(shí)候才會(huì)在末尾出現(xiàn)0盏浇,其實(shí)10也可以看做一種25变丧,那么其實(shí)就是看我們這個(gè)n中包含多少個(gè)25了,而因?yàn)橛?就一定會(huì)有2绢掰,因?yàn)?比2大痒蓬,相反有2不一定有5童擎,所以只需要考慮n中有多少個(gè)5就可以了。此外攻晒,對(duì)于25這個(gè)數(shù)顾复,我們知道25*4=100,末尾會(huì)有兩個(gè)0炎辨,而4也比5小捕透,所以當(dāng)出現(xiàn)25時(shí)聪姿,會(huì)加上兩個(gè)0碴萧,也就是說答案還要加上有多少個(gè)25。以此類推末购,還要考慮125破喻、625等等,所以這是一個(gè)需要遞歸來實(shí)現(xiàn)的過程盟榴。
代碼
public class Solution {
public int trailingZeroes(int n) {
return n == 0 ? 0 : n/5 + trailingZeroes(n/5);
}
}