leetcode刷題-階乘後的零
阿新 • • 發佈:2021-02-04
題目
給定一個整數 n,返回 n! 結果尾數中零的數量。
示例 1:
輸入: 3
輸出: 0
解釋: 3! = 6, 尾數中沒有零。
示例 2:
輸入: 5
輸出: 1
解釋: 5! = 120, 尾數中有 1 個零.
說明: 你演算法的時間複雜度應為 O(log n) 。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題解分析
結尾0的個數與1、…、n中因子分解包含5的個數相關,比如
1、2、3、4、5、...、10
能貢獻因子5的只有 5、10,一個貢獻2個5因子(5 = 5 * 1,10 = 2 * 5),故最終結果為2。
因此,
再對於1、…、n,只需要考慮5、10、15、…、5 * x,即
1 * 5、2 * 5、...、x * 5
上面數列都除於5(每個數都貢獻1個5因子),一共貢獻了 n / 5 = x個,數列變成了
1、2、...、x
變成了求解遞迴問題:
public int trailingZeroes(int n) { if (n < 4) { return 0; } int x = n / 5; return x + trailingZeroes(x); }
等價於:
class Solution {
public int trailingZeroes(int n) {
int sum = 0;
while (n > 0) {
n /= 5;
sum += n;
}
return sum;
}
}