题目描述
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
思路1:
将1~n的所有数字转化成str然后把所有的str合成一个str找出这个str中1的个数
map(函数,数组)
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
if n > 0:
number = ''.join(map(str, range(1,n+1))) #Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
one_times = number.count('1')
return one_times
else:
return 0
或者
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
return ''.join(map(str, range(n+1))).count('1')
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
ones,m =0,1
while m<=n:
ones += (n//m+8)//10*m + (n//m%10==1)*(n%m+1)
m *= 10
return ones
拓展:计算1至n中数字X出现的次数
这是一道比较简单的题目,举个例子先:假设 n=11,X=1,那么就是求 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 这 11 个数字中 1 出现的次数,很容易能看出来结果为 4,在 1 和 10 中各出现了一次,在 11 中出现了两次。
方法1:l类似上面的
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# write code here
return ''.join(map(str, range(n+1))).count('1') #把1变成0-9的数字即可
方法2:
最简单的办法就是依次遍历 1 至 n,再分别求每个数字中 X 出现的次数,代码如下所示:
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
count=0
for i in range(1,n+1):
while i:
if i%10==1:
count+=1
i=i/10
return count
方法3:
https://blog.youkuaiyun.com/yi_afly/article/details/52012593
拓展2:
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
思路:
通过建立两个列表,把字符串转换成数字储存在第一个列表里。
然后遍历列表1,将列表1出现的数字出现的次数同步到列表2,最后找到列表2最大的下标,输出。
通过建立两个列表,把字符串转换成数字储存在第一个列表里。
然后遍历列表1,将列表1出现的数字出现的次数同步到列表2,最后找到列表2最大的下标,输出。
代码如下:
l=[]
a=input().split()
for i in a:
l.append(int(i))
l2=[]
for i in l:
count=0
for j in l:
if i==j:
count=count+1
l2.append(count)
max=l2[0]
for i in range(len(l2)):
if l2[i]>=max:
t=i
max=l2[i]
print("{} {}".format(l[t],max))