AcWing 56. 从1到n整数中1出现的次数
原题链接
困难
作者:
月涌江流
,
2019-03-24 15:32:56
,
所有人可见
,
阅读 2857
Python 代码
'''
question 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。
example 设数字为abcde,当前位数为c位,
c位1的个数即为高位个数+低位个数
高位范围为 00 ~ ab-1 :
有 ab*100 个(因为c在百位)
低位分为三种情况:
c = 0 ,有 0 个
c = 1 ,有 de + 1 个
c > 1 , 有 100 个 (因为c在百位)
依次遍历每一位数相加,即为总共1的个数
'''
class Solution(object):
def numberOf1Between1AndN_Solution(self, n):
res = 0
n = str(n)
for i,v in enumerate(n):
if i >= 1: #处理该高位部分
res += int(n[:i])*(10**(len(n) - i - 1))
if int(v) == 1: #处理该低位部分
if i == len(n) - 1:
res += 1
else:
res += int(n[i+1:]) + 1
elif int(v) > 1:
res += 10**(len(n) - i - 1)
return res
这题是不是也可以将输入的数字转成字符串再依次扫描统计呢
这个解法就是转换为字符串后结合所在数位进行统计哈,先str()了一下