zoukankan      html  css  js  c++  java
  • 从1到n整数中1出现的次数

    来源:牛客网

    题目描述

    输入一个数字n,求出1~n所有整数中1出现的次数。例如,求出1~13的整数中1出现的次数?1~13中包含1的数字有1、10、11、12、13因此共出现6次。
    先贴个粗暴的解法:依次遍历每个数,通过%运算求得每个数中1的个数,累加起来:
    public static int NumberOf1Between1AndN_Solution(int n) {
        int sum=0;
        for(int i=1; i<=n; ++i) sum+=getOne(i);
        return sum;
    }
    
    /*
    13101/10=1310...1
    1310/10=131...0
    131/10=13...1
    13/10=1...3
    1/10=0...1
    */
    public static int getOne(int n){
        int res=0;
        while(n!=0){
            if(n%10==1) res++;
            n /= 10;
        }
        return res;
    }

    其中getOne函数复杂度为lgn,因此总的复杂度为n*(lgn)。

    更高效的方法是统计数字规律,将n的每一位置1,观察其他位的可能数,然后加起来。代码下次贴。

    另外发现一点小规律:左边是n的取值,右边是[1,n]中1出现的次数。

    n     numOf1(1...n)
    1         1
    10       2
    100     21
    1000      301
    10000    4001
    100000     50001
    1000000   600001

    cd

  • 相关阅读:
    平台总体技术架构
    防控激活
    dse测试说明
    设置内核tcp连接数
    删除topic的尝试
    用Jmeter进行接口压力测试的步骤
    性能测试
    配置文件的修改
    mysql 监控
    电子栅栏sql和接口查询
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5712689.html
Copyright © 2011-2022 走看看