• [leedcode 233] Number of Digit One


    Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

    For example:
    Given n = 13,
    Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

    public class Solution {
        public int countDigitOne(int n) {
           /* intuitive: 每10个数, 有一个个位是1, 每100个数, 有10个十位是1, 每1000个数, 有100个百位是1.  做一个循环, 每次计算单个位上1得总个数          (个位,十位, 百位).  
            例子:
            以算百位上1为例子:   假设百位上是0, 1, 和 >=2 三种情况: 
                case 1: n=3141092, a= 31410, b=92. 计算百位上1的个数应该为 3141 *100 次.
                case 2: n=3141192, a= 31411, b=92. 计算百位上1的个数应该为 3141 *100 + (92+1) 次. 
                case 3: n=3141592, a= 31415, b=92. 计算百位上1的个数应该为 (3141+1) *100 次. 
            以上三种情况可以用 一个公式概括:
                (a + 8) / 10 * m + (a % 10 == 1) * (b + 1);*/
                
                //因为当n为int最高位(10)位时,当m<=n,此时m*10会超出32int范围,所以需要将m声明为long
            int res=0;
            for(long m=1;m<=n;m=m*10){
                int a=n/(int)m;
                int b=n%(int)m;
                res+=(a+8)/10*m;
                if(a%10==1) res+=b+1;
            }
            return res;
        }
    }
  • 相关阅读:
    NFS部署
    centos6 编译安装 mysql5.6----------centos7编译安装MySQL5.7
    db2部署
    FTP服务部署
    ssh 免交互式登陆
    dockerfile
    docker 入门
    求助 webBrowser 的兼容性问题 有偿的 500红包
    EF 请求数据是缓存 求大神解释
    跪求 EF缓存问题 也不知道是不是缓存 问题
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4713555.html
Copyright © 2020-2023  润新知