zoukankan      html  css  js  c++  java
  • [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;
        }
    }
  • 相关阅读:
    数据挖掘相关资料收集(持续更新)
    常见面试之机器学习算法思想简单梳理
    在c中保存状态
    lua 和 c
    lua 基础库
    lua 面向对象
    lua 高级
    lua 基础
    lua中的协程
    cocos2d中的可见性检测
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4713555.html
Copyright © 2011-2022 走看看