给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例:
输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。
思路:
- 假设n=abcde,如果要计算百位上的1的次数,受到3个因素的影响:百位上的数字,百位下的数字,百位上的数字。
- 如果百位上的数字是0,百位上可能出现的1的次数由更高位决定,等于(ab)*100
- 如果百位上数字是1,百位上可能出现的1的次数由更高位和低位决定,等于(ab)*100+(cde)+1
- 如果百位上数字是其他,百位上可能出现的1的次数由更高位决定,等于(ab+1)*100.
1 | class Solution: |