• 从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

  • 相关阅读:
    密码框组件
    文本框组件
    列表框组件
    复选框组件
    单选按钮组件
    nginx for windows
    Mesa 3D
    下载服务器文件到本地
    消息服务
    Redis查看已注册的提供者消费者信息
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5712689.html
Copyright © 2020-2023  润新知