数字从小到大,把每个数包含的1的个数放到一个字典里去。
每一个大数分解成最高位+余下数,比如2021分解为2和021两部分,分别判断最高位和分出来的那部分相加即可,缺点是比较费空间
# -*- coding:utf-8 -*- import collections class Solution: def NumberOf1Between1AndN_Solution(self, n): # write code here sum = 0 numLib = {} N = 1 for num in range(n+1): numLib.setdefault(num,0) numLib[num]=(numLib[num % N]+int(num//N==1)) sum+=numLib[num] if num==10*N-1: N*=10 return sum