示例 1:輸入: 3
輸出: 0
解釋: 3! = 6, 尾數中沒有零。
示例 2:說明: 你演算法的時間複雜度應為 o(log n) 。輸入: 5
輸出: 1
解釋: 5! = 120, 尾數中有 1 個零.
感慨:今年408機組題目就是n!題目。。。。
解答:第一眼就可以排除是 將n!算出來再數0 之類的演算法。n!是很大的數字,對於乙個很小的n,計算機便已經無法儲存。
觀察原題,題目讓我們求階乘後尾數有乙個0,那麼什麼數字能造成尾數上有0呢? 2 * 1=2 , 3 * 4 =12 都沒有尾數都沒有0,而 5! = 120,尾數上便出現了0,因此當n>=5時,尾數上會出現0.可以類推,5! 有 1 個0, 10!便會有2個…當 n = 25時,由於 25 = 5 * 5,因此會額外地多出乙個0。。。同樣,依次推類。
**:產生了第乙個版本。
class solution
return sum;
}// 當 n = 2147483647 超時。。
};
由於發生超時,開始優化演算法。 例如 n = 5 時就會有1個0,n = 10 時會有 兩個0,可以將 n/ 10 得到因子只含有乙個5時的0的個數。之後,再將 n / 25 (因為 25 = 5 * 5)得到因子含有兩個5時的0的個數。依次 n/125…
第二個版本如下:
class solution
return sum;
}};// 當 n = 2147483647 依舊超時。。
//我比較鬱悶,已經降到o(logn)量級了,為什麼還是超時。
//難道pow費時間?
最終ac版本,思想與第二個版本一樣。
class solution
return sum;}};
執行結果:
LeetCode刷題 階乘後的零
給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 題解 這道題求解的是尾數中零的個數,根據乘法規則我們知道,2的倍數與5的倍數相...
LeetCode刷題之172 階乘後的零
我不知道將去向何方,但我已在路上!輸入 numbers 2,7,11,15 target 9 輸出 1,2 解釋 2 與 7 之和等於目標數 9 因此 index1 1,index2 2class solution def twosum self,numbers list int target in...
刷演算法 LeetCode 階乘後的零
給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 首先暴力破解法就是直接把最終的結果求出來然後看末尾有幾個0,但是這樣做的時間複...