LeetCode233 数字 1 的个数
枚举每一个数位为1时存在多少种满足小于等于n的数字
- 当前数位大于1,不存在限制,存在数字个数为左边 \(\times\) 右边
- 当前数位等于1,右边存在限制,当左边等于n的部分时,右边必须满足小于等于n的条件
- 当前数位等于0,右边存在限制,当左边等于n的部分时,不满足情况,左边必须小于n的部分时,当前数位才可置1
class Solution:
def countDigitOne(self, n: int) -> int:
i, ans = 1, 0
while i <= n:
cur_bit = (n // i) % 10
if cur_bit == 1: ans = ans + (n // (i * 10)) * i + (n % i) + 1
elif cur_bit == 0: ans = ans + (n // (i * 10)) * i
else: ans = ans + (n // (i * 10) + 1) * i
i = i * 10
return ans