剑指Offer 43.1~n整数中1出现的次数 | LeetCode 233.数字1的个数 (Python)

剑指Offer 43.1~n整数中1出现的次数

给定一个整数n,计算所有小于等于n的非负整数中数字1出现的个数。

输入: 13
输出: 3
解释: 数字1出现在以下数字中:1,10,11,12,13

LeetCode 233.数字1的个数

两题是同一个题。


解题思路

老实说,我本人很怕做这类型的题目,需要找到数学规律,还得保证代码的逻辑性。
解决这个问题需要理解一个核心概念:
对于每一个位的数字,受到当前位,高位以及低位三方面的影响。


下面举例子来说明,假设输入为101314,先来看看十位

输入:101314
当前位的数字:1
高位:1013
低位:14

我们可以先观察:
10~100中,十位上出现1的有10, 11, 12, 13, 14, 15, 16, 17, 18, 19这10个数字
100~200中,十位上出现1的有110, 111, 112, 113, 114, 115, 116, 117, 118, 119这10个数字
...
1000~1100中,十位上出现1的有1010,1011,1012,1013,1014,1015,1016,1017,1018,1019这10个数字
得到一条规律:
我们在不考虑其他位置的情况下(如百位、千位)&#x
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值