1.找位数
2,看是从后面还是从前面找1
# -*- coding:utf-8 -*- class Solution: def NumberOf1Between1AndN_Solution(self, n): # write code here result = 0 for i in range(1, n+1): i_tmp=i #给个临时i,其实没啥用 shang= 0 #重新赋值,以免下次循环出错 yu_shu= 0 #重新赋值,以免下次循环出错 #求n的位数,其实就是每次除以10,看能除几次 tmp = i_tmp//10 ##地板除 max_10 = 0 #重新赋值,以免下次循环出错 max_10 += 1 #如果i是个位数,直接得出i的位数.如果不是,则在下面的while中重新赋值 while tmp: #当i/tmp的十位上不为0时循环 max_10 += 1 #i是几位数,max_10就是几 tmp = tmp//10 while max_10: #max_10是几,i就是几位数,就循环几次 shang=i_tmp//(10**(max_10-1)) yu_shu =i_tmp%(10**(max_10-1)) i_tmp=yu_shu max_10 -= 1 if shang == 1: result +=1 return result
i_tmp=11...........商....余数
11/10 ............... 1......1..........余数给i_tmp
1/1 ....................1......0..........循环结束