[LeetCode] 172. Factorial Trailing Zeroes

题:https://leetcode.com/problems/factorial-trailing-zeroes/

题目

Given an integer n, return the number of trailing zeroes in n!.

Example 1:

Input: 3
Output: 0
Explanation: 3! = 6, no trailing zero.

Example 2:

Input: 5
Output: 1
Explanation: 5! = 120, one trailing zero.
Note: Your solution should be in logarithmic time complexity.

题目大意

尾部的 0 由 2 * 5 得来,2 的数量明显多于 5 的数量,因此只要统计有多少个 5 即可。

对于一个数 N,它所包含 5 的个数为:N/5 + N/52 + N/53 + …,其中 N/5 表示不大于 N 的数中 5 的倍数贡献一个 5,N/52 表示不大于 N 的数中 52 的倍数再贡献一个 5 …。

如果统计的是 N! 的二进制表示中最低位 1 的位置,只要统计有多少个 2 即可,该题目出自 编程之美:2.2 。和求解有多少个 5 一样,2 的个数为 N/2 + N/22 + N/23 + …

思路

方法一

递归

递归函数:n中有5的个数。
递归转移方程:n/5(从 1~n 中 是5倍数数的个数)+ n/5中有5的个数
终止条件:n==0 ,return 0;

class Solution {
    public int trailingZeroes(int n) {
        if(n==0)
            return 0;
        return n/5 + trailingZeroes(n/5);
    }
}

方法二

非递归

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

猜你喜欢

转载自blog.csdn.net/u013383813/article/details/83655818