• 1.题目描述
  • 2. 清奇思路:如何找数字规律判断每一位有几个“1”
    • 2.1 举例子找规律

      • 2.1.1百位为例,百位上至少有多少个“1”
      • 2.1.2 如果X>1(即X为2~9)
      • 2.1.3 如果X==0
      • 2.1.4 如果X==1
    • 2.2用公式写出来
    • 2.3代码表示

1.题目描述

  1. 1~13中包含1的数字有1、10、11、12、13,因此“1”共出现6次;
  2. 求出任意非负整数区间中1出现的次数。

首先需要说明的是:题目要求的是“1”的个数而不是含1的数字的个数,也就是说对于数字“11”,是有有两个“1”的。是要算两次的!!!!

2. 清奇思路:如何找数字规律判断每一位有几个“1”

牛客网该题目下咩咩jiang的回答由于没有图,字也挤在一起-_-||,原谅我第一次真的看不进去。
博客:yi_Afly的专栏中从1到n整数中1出现的次数图文并茂,讲解的很清楚,思路上和上面的大佬是相近的,建议先看yi_Afly的再回看咩咩jiang的,可能会稍稍好一些。


下面开始是我整理两位的发言,梳理的比较有逻辑一点。

2.1 举例子找规律

yi_Afly从个位开始讲解,但是最终仍然回归到一样的代码上去,因此本文这里先和咩咩jiang一样,以百位为例,说明如何计算,然后再说明为什么个位计算方法可以与百位的相同。

我们以数字          3 1 X 5 6                 为例  //X表示百位数字不定(0~9)均有可能

2.1.1百位为例,百位上至少有多少个“1”

我们用一个Round变量表示百位之前更高位所留存的数字。
那么,很明显可以知道,不管X是多少,在Round从0~30轮中,百位上有“1”的次数至少是31次,因为百位每一次出现“1”需要持续100次(100-199),因此百位上“1”的个数至少有 31∗100 31 ∗ 100 31*100。

这个100是由于百位本身的特性决定的,因此如果我们记X所在的位权重为Base,如下图所示:

那么,百位上“1”至少出现的次数就是: Round∗Base R o u n d ∗ B a s e Round*Base.


2.1.2 如果X>1(即X为2~9)

这里我们应该也知道,在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。
所以如果 X>1 X > 1 X>1,那就是看 100−199 100 − 199 100-199有多少个“1”。因此,如果X>1,百位上“1”的个数有 31∗100+1∗100 31 ∗ 100 + 1 ∗ 100 31*100+1*100。

那么,此时百位上“1”出现的次数就是: (Round+1)∗Base ( R o u n d + 1 ) ∗ B a s e (Round+1)*Base.

2.1.3 如果X==0

在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。所以,如果 X==0 X == 0 X==0,那就是看 31000−31056 31000 − 31056 31000-31056有多少个“1”。很明显没有。

那么,此时百位上“1”出现的次数就是: (Round)∗Base ( R o u n d ) ∗ B a s e (Round)*Base.

2.1.4 如果X==1

在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。所以,如果 X==1 X == 1 X==1,那就是看 31100−31156 31100 − 31156 31100-31156有多少个“1”。取决于百位后面的数字是多少。
如果我们记百位后面的数字为Former,如图所示:

那么,此时百位上“1”出现的次数就是: (Round)∗Base+Former+1 ( R o u n d ) ∗ B a s e + F o r m e r + 1 (Round)*Base+Former+1.

2.2用公式写出来

1.Round=N/Base/10的商 1. R o u n d = N / B a s e / 10 的 商

1. Round =N/Base/10的商

2.Former=N/Base的余数 2. F o r m e r = N / B a s e 的 余 数

2. Former =N/Base 的余数百位上“1”出现的次数就是:

Round+ϵ(X−1))∗Base+(Former+1)∗δ(X−1) R o u n d + ϵ ( X − 1 ) ) ∗ B a s e + ( F o r m e r + 1 ) ∗ δ ( X − 1 )

Round+\epsilon(X-1))* Base+(Former+1)*\delta(X-1)
其中, ϵ(X)是阶跃函数,δ(X)是冲激函数 ϵ ( X ) 是 阶 跃 函 数 , δ ( X ) 是 冲 激 函 数 \epsilon(X)是阶跃函数,\delta(X)是冲激函数

2.3代码表示

int NumberofOnes(int n)
{int count = 0;long long base = 1;for(base =1;base<=n;base*=10){int Round =  n/base;int X = Round%10;Round/=10;int Former = n%base;count=count+(Round*base+(X>1)*base+(Former+1)*(X==1))}return count;
}

当然,根据上述思路还有一些其他的代码表示,也很精妙,但是我个人觉得不如我这个来的直观。

最后说一说为什么个位也可以用,因为个位的Former为0。不会影响到个位整体计算公式的。

清奇思路(六)从1到n整数中1出现的次数相关推荐

  1. 告诉你什么是挖洞最清奇的脑回路

    AirPlan Task1 And Task2 本文由prison翻译整理,原文地址:https://hshrzd.wordpress.com/201 - enge-tasks-1-and-2/ 黑客 ...

  2. 四款画风清奇的减压小工具,资深职场员工的推荐,还不快收藏

    作为一个职场人员经常听到身边的朋友向自己抱怨,自己的工作压力太大了,怎么办?确实在如今这个快节奏的生活里,每个人都会因为身上的压力过大而导致自己生活的不如意. 那么我们该如何的解压呢?小编今天就来和大 ...

  3. 爱奇艺六季度付费用户数据一览,巨头A股还有希望吗?

    春节假期刚过完,上班第一天发现明星中概股集体崩了. 拼多多.京东.唯品会集体大跌,在美股上市的电商巨头跌幅均超3%. 爱奇艺跌了,百度跌了,互联网巨头们的突然下跌让小股民们纷纷来抱瓜吃:这次不知又埋葬 ...

  4. 计算机网络安全六要素,六要素教学在计算机网络教学中的探索与反思

    <六要素教学在计算机网络教学中的探索与反思>由会员分享,可在线阅读,更多相关<六要素教学在计算机网络教学中的探索与反思(5页珍藏版)>请在装配图网上搜索. 1.六要素教学在计算 ...

  5. 九十六、轻松搞定Python中的PPT办公自动化系列

    @Author:Runsen @Date:2020/7/14 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  6. 华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用

    本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用>,原文作者:高斯Redis官方博客. 一.背景 GaussDB(for Re ...

  7. 思维方式-《六顶思考帽》书中的精髓:通过在同一时间只使用一顶思考帽的方法,可以解决思维混乱等问题,从而提升思考效率。

    <六顶思考帽>书中的精髓:通过在同一时间只使用一顶思考帽的方法,可以解决思维混乱等问题,从而提升思考效率. 日常工作生活中,我们常常会遇见这样的情况:会议又长又没重点.不同部门之间争执不停 ...

  8. PullScrollView详解(六)——延伸拓展(listview中getScrollY()一直等于0、ScrollView中的overScrollBy)

    前言:经常说follow your heart.但等到真到这么一天的时候,却很艰难 相关文章: 1.<PullScrollView详解(一)--自定义控件属性> 2.<PullScr ...

  9. 数据分析记录(六)--多元线性回归在SPSS中的实现(步骤及指标含义)

    数据分析记录(六)–多元线性回归在SPSS中的实现(步骤及指标含义) 本文仅作为自己的学习记录以备以后复习查阅 在回归分析中,如果有两个或两个以上的自变量,就称为多元回归.事实上,一种现象常常是与多个 ...

  10. python进制转化bin oct dec hex_进制的英文表示法:BIN、OCT、HEX、DEC分别代表二、八、十六、十进制~BINOCTHEXDEC在英语中什么意思?...

    进制的英文表示法:BIN.OCT.HEX.DEC分别代表二.八.十六.十进制~ BIN_OCT_HEX_DEC_在英语中什么意思?,dec 容颜|用户:想咨询的 辰时数暖等屿凉.|用户:问问回答: b ...

最新文章

  1. Corrigendum: A window into third generation sequencing
  2. cocos2d-x开发中wstring和string的转换
  3. 解决ECSHOP后台订单里面点击编辑配送方式时出现的警告问题
  4. 写在岁末 -- 程序员的人生并非那么容易,努力向前奔跑吧!
  5. go WaitGroup 简单示例
  6. python cookie使用_Python使用cookielib模块操作cookie的实例教程
  7. MOSS中自定义WebService
  8. VS 使用 :新建项目
  9. (转)CDN是如何工作的?
  10. ArcGis中这些你真的清楚么
  11. 又一款神器:半小时带你轻松上手k8s
  12. Android安全防护之旅---Android应用反调试操作的几种方案解析
  13. OpenCV(0)---机器学习库
  14. 深度残差网络 ResNet
  15. 三相桥式全控整流电路simulink仿真_变频器为什么要整流然后再逆变?
  16. python调用word报错,提示“服务器运行失败”,现已解决
  17. 重置或者修改mysql的root密码
  18. python游戏功能_python 游戏(龙的国度)
  19. VOC数据集的划分(训练集,验证集,测试集) 生成txt文件和标签
  20. 【中间件】RabbitMQ入门学习笔记

热门文章

  1. arm c语言的交叉编译环境ads代码,交叉编译环境的概念以及建立步骤
  2. css 超出部分隐藏 超出部分给滚动条 超出部分展示 自动
  3. 关于Field[]的解释!!!
  4. 自动判断文本文件编码来读取文本文件内容(.net版本和java版本)
  5. 使用命令行脚本安装 PrestaShop 1.6
  6. ERROR in Entry module not found: Error: Can‘t resolve ‘html-loader‘ in
  7. js 中中括号 [ ] 在封装axios 的妙用
  8. 菜鸟学习系列 - Windows(华为2288H V5安装Win16驱动程序)
  9. ebay如何通过html上传图片,eBay上传图片要求详解,附图片制作技巧
  10. springcloud 基于Finchley.SR2版本 feign 配置