剑指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