[編號][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⌋ 個
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
總結
分析問題的時候需要細化問題,為了更好的解決可以進行列式解決問題。