数字从小到大,把每个数包含的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

京公网安备 11010502036488号