ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lc 233 数位上的1

2021-02-27 21:58:40  阅读:185  来源: 互联网

标签:10 xi xn lc res 3400 div 233 数位


十分位为例

以3465作为例子, 十位数上为1能出现几次?
分为两部分计算, 按3400 以下和以上单独讨论。
小于3400
3300 ~ 3399 里, 有10个1, 分别为3310, 3311, …, 3319
3200 ~ 3299里, 也有10个1,
0000 ~ 0099里也是10个1.

3400以上
如果是3415, 那只能有 3410 ~ 3415共6个数字
如果是3465, 则能有 3410 ~ 3419 共10个数字

百分位为例

以3465作为例子, 百位数上为1能出现几次?
分为两部分计算, 按2000 以下和以上单独讨论。
小于3000
2000 ~ 2999 里, 有100个1, 分别为2100 ~ 2199
1000 ~ 1999 里,也有100个1
0000 ~ 0999里也是.

3000以上
3000以上时,只有31xx能让百分位为1,能取3100~3199, 所以有100个.

泛化

对于数字xn, xn-1, …, x1, 问第i位上为1几次?

把数字看做xn, xn-1, …xi+1, xi, xi-1, …, x1三个部分
则分别讨论xn, … xi+1, 0, … 0以下的数, 和以上的数即可.

答案

所以对于每个位, 都按照

class Solution:
    def countDigitOne(self, n: int) -> int:
        res = 0;
        cnt = 1;
        div = 1
        while n / div > 0:
            cnt = 0
            i = (n // div) % 10
            res += (n // (div * 10)) * div
            if i == 1:
                res += n % div + 1
            elif i > 1:
                res += div
            div *= 10;

        return res

标签:10,xi,xn,lc,res,3400,div,233,数位
来源: https://blog.csdn.net/duoyasong5907/article/details/114193390

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有