leetcode3.25每日一题(172. 阶乘后的零)

143 阅读1分钟

172. 阶乘后的零

虽然这个题是一个mid,但是我简单的说一下原理,大家就知道这其实跟Easy没啥区别。

n的阶乘就是1 * 2 * 3.......*n。

看结果后面的0的个数无非就是看各个数能出几个10。比如24525000看后面几个0,也就是看阶乘乘了几个10。

10的话就是可以用2 * 5,10 * 1来分解表示啦,其中2跟5都是不可分解的数字,这样,我们只需要看阶乘里面包含几个2,几个5就好啦,比如10的阶乘。

1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10

里面2出一个2,4出两个2,6出一个2,8出一个2,10出一个2,一共6个2,然后5与10各出一个5,一共两个5,其中取最小值。这样后面就有2个10啦,也就是出了两个0.

(一般都是5少,这样来看的话,咱们看5的个数就行)

思路当然的递归啦,懒!!!(递归不懂的话,循环也行)

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

递归的条件就是每5个出一个能整除5嘛,看看他能出多少个。