题目
题目描述
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例1
输入: n = 12
输出: 5
示例2
输入: n = 13
输出: 6
题解
位数规律
依次遍历数字n的每一位数,根据规律统计出现1的个数。
- 当前位 = 0: 只由高位决定,即
high * digit
; - 当前位 = 1: 由高位和低位共同决定,即
high * digit + low + 1
; - 否则: 只由高位决定,即
(high + 1) * digit
;
时间复杂度: O(logn),遍历数字n的位数,需要循环logn次;
空间复杂度: O(1),变量占用常数级额外空间;
class Solution: |