题解 | #JZ31 整数中1出现的次数#

整数中1出现的次数(从1到n整数中1出现的次数)

http://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6

    public int NumberOf1Between1AndN_Solution(int n) {
        //出现的总数其实就是各个位置上的1的个数的和
        //当前位,n(i),cur
        //高位n(N)....n(i+1),high
        //低位n(i-1)...n(1),low
        //注意当前位出现1的个数其实是和当前位的digital是挂钩的,比如是十分位,那么可能有10...19出现1,有10个
        //而百分位就成了100...199出现1,有100个数,以此类推
        //而像是10分位的1,有几个10...19出现呢?这就看高位了,至少会有0~high-1共有high个

        //不管是当前位是什么,总会有(0~high-1) * digital的基本盘,就是看当前位的值决定是否能多捞点
        //如果当前位是0如2007的第二位,那么在当前位可能出现1的次数为,         high*digital
        //如果当前位是1如2017的第二位,那么在当前位可能出现1的次数为           high*digital+low+1
        //如果当前位是2...9如2037的第二位,那么在当前位可能出现1的次数为       (high+1)*digital
        int cur = n % 10;
        int high = n / 10;
        int low = 0;
        int digital = 1;
        int res = 0;
        while(cur!=0||high!=0){
            res+=high*digital;
            if(cur==1){
                res+=low+1;
            }else if(cur!=0){
                res+=digital;
            }
            low += cur * digital;
            digital *= 10;
            cur = high%10;
            high /= 10;
        }
        return res;
    }
全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
10-31 21:01
武汉大学 Java
lulululula...:仅仅按我个人的经历来看,大厂其实很少特别关注微服务,一般对微服务架构,限流熔断降级的概念了解就行,简历不写也不容易被问到。现在这个势头不如站点agent应用,比如做做mcp,rag,r对话agent,记忆管理之类的,说不定可以蹭上一波热度,进公司虽然可能还是干agent的杂活,但是可以学一学组内的业务和技术了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务