# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
# 百位为例
# 1.百位==0 - 10023:100~199、1100~1199、2100~2199、...、9100~9199
# 100+100*9 = 1000:更高位(10)*位置(百位100)
# 2.百位==1 - 10123:100~199、1100~1199、2100~2199、...、9100~9199、10100~10123
# 1000+23+1 = 1024:更高位(10)*位置(百位100)+ 更低位(23)+1
# 3.百位>1 - 10223:100~199、1100~1199、2100~2199、...、9100~9199、10100~10199
# 100+100*9+100=1100:(更高位(10)+1)*位置(百位100)
_sum = 0
i = 1 # 位置
while n // i != 0:
high = n // (i*10)
current = (n // i) % 10
low = n - high*(i*10) - current*i
if current == 0:
_sum += high*i
elif current == 1:
_sum += high*i + low + 1
else:
_sum += (high+1)*i
i *= 10
return _sum
剑指Offer56-整数中1出现的次数(从1到n整数中1出现的次数)(记规律-百位为例)
最新推荐文章于 2021-06-09 23:39:13 发布