# -*- coding:utf-8 -*- class Solution: def NumberOf1Between1AndN_Solution(self, n): # bit 代表位数 个位 十位 百位 # high代表高位 low代表当前位数的更低位 # 502223 bit = 100 high = 502 low = 23 # cur = num/bit%10 # cur > 1 : (high + 1) * bit # cur = 1 : high * bit + (1+low) 自身1 + 23个1即:100~123 # cur = 0 :high * bit 0~4 = 5 bit = 1 sum = 0 while(bit <= n): cur = (n // bit) % 10 # 213 % 1 = 0 low = n % bit high = n // bit // 10 if cur > 1: sum += (high + 1) * bit elif cur == 1: sum += high * bit + (1+low) else: sum += high * bit bit = bit * 10 return sum