Leetcode-793. 阶乘函数后K个零

793. 阶乘函数后K个零
f(x) 是 x! 末尾是0的数量。(回想一下 x! = 1 * 2 * 3 * ... * x,且0! = 1)

例如, f(3) = 0 ,因为3! = 6的末尾没有0;而 f(11) = 2 ,因为11!= 39916800末端有2个0。给定 K,找出多少个非负整数x ,有 f(x) = K 的性质。

示例 1:
输入:K = 0
输出:5
解释: 0!, 1!, 2!, 3!, and 4! 均符合 K = 0 的条件。

示例 2:
输入:K = 5
输出:0
解释:没有匹配到这样的 x!,符合K = 5 的条件。
注意:

K是范围在 [0, 10^9] 的整数。
解题思路
我们知道随着n增大,阶乘0的个数是单调递增的。那么我们利用5的阶乘求出有几个0.
剩下的就可以用二分查找找到0的个数等于k的左右边界,然后右边界减左边界+1就是问题所求
二分查找的下限为0,上限由k决定。k的最大值为10^9,则int的最大值会溢出,应该选择long的最大值
图片说明

class Solution {
    public int preimageSizeFZF(int K) {
        //trailingZeroes(n) == K 的右侧边界-左侧边界加上1.就是中间有多少等于k
        return (int)(right_bound(K)-left_bound(K))+1;
    }
    public long trailingZeroes(long n){

        long res=0;
        for(long d=n;d/5>0;d=d/5){
            res+=d/5;
        }
        return res;
    }
    ///* 搜索 trailingZeroes(n) == K 的左侧边界 */
    public long left_bound(int target){
        long li=0;
        long ri=Long.MAX_VALUE;
        while(li<ri){
            long mid=(ri-li)/2+li;
            if(trailingZeroes(mid)<target){
                li=mid+1;
            }
            else{//大于等于一定不是左边界(前一个不一定,所以不能mid-1)
                ri=mid;
            }
        }
        return li;
    }
    //最后让li指向最右侧边界
    public long right_bound(int target){
        long li=0;
        long ri=Long.MAX_VALUE;
        while(li < ri){
            long mid=(ri-li)/2+li;
            if(trailingZeroes(mid)>target){
                ri=mid;
            }else{//li需要指向>k的,所以<=k,则直接右移li
                li=mid+1;
            }
        }
        return li-1;
    }
}
Leetcode-牛客-刷题笔记 文章被收录于专栏

本专栏主要用于分享栏主在准备java后端面试过程中的刷题笔记

全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-29 12:19
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
440428次浏览 4493人参与
# 春招别灰心,我们一人来一句鼓励 #
41455次浏览 524人参与
# 北方华创开奖 #
107287次浏览 599人参与
# 地方国企笔面经互助 #
7922次浏览 18人参与
# 虾皮求职进展汇总 #
114057次浏览 883人参与
# 实习,投递多份简历没人回复怎么办 #
2453918次浏览 34847人参与
# 阿里云管培生offer #
119766次浏览 2219人参与
# 实习必须要去大厂吗? #
55665次浏览 960人参与
# 同bg的你秋招战况如何? #
75478次浏览 551人参与
# 提前批简历挂麻了怎么办 #
149813次浏览 1977人参与
# 投递实习岗位前的准备 #
1195668次浏览 18546人参与
# 你投递的公司有几家约面了? #
33170次浏览 188人参与
# 双非本科求职如何逆袭 #
661868次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157600次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4723次浏览 54人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11332次浏览 270人参与
# 发工资后,你做的第一件事是什么 #
12405次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35599次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20087次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39225次浏览 314人参与
# 我的上岸简历长这样 #
451915次浏览 8088人参与
# 非技术岗是怎么找实习的 #
155842次浏览 2120人参与
牛客网
牛客企业服务