1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字乘以当前位数的权重10的i-1次方。
2. 如果第i位上的数字为1,则第i位上可能出现1的次数不仅受更高位影响,还受低位影响(若没有低位,视低位为0),等于更高位数字乘以当前位数的权重10的i-1次方+(低位数字+1)。
3. 如果第i位上的数字大于1,则第i位上可能出现1的次数仅由更高位决定(若没有高位,视高位为0),等于(更高位数字+1)乘以当前位数的权重10的i-1次方。
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
res=0
base=1
tmp=n
while tmp:
last=tmp%10
tmp=tmp/10
res=res+base*tmp
if last==1:
res=res+(n%base)+1
elif last>1:
res=res+base
base=base*10
return res