📅  最后修改于: 2023-12-03 15:36:22.419000             🧑  作者: Mango
本文介绍如何以很大的数字打印所有K位重复数字的方案。K位重复数字指的是由K个相同数字组成的数字,例如2222、444444等。我们希望打印出所有K位重复数字,且数字可以很大。
我们将介绍两种不同的方案,一种是暴力枚举法,另一种是数学方法。
暴力枚举法是最简单的方法,我们可以枚举所有K位数字,判断它们是否为重复数字,如果是,就打印出来。
例如,我们可以从10^(K-1)到10^K-1枚举所有的K位数字,然后判断它们是否为重复数字。如果是,就打印出来。
def brute_force(k):
start = 10**(k-1)
end = 10**k - 1
for i in range(start, end+1):
if is_repeated_num(i):
print(i)
其中,is_repeated_num函数用于判断一个数字是否为K位重复数字:
def is_repeated_num(n):
s = str(n)
for i in s:
if i != s[0]:
return False
return True
但是,这种方法的时间复杂度非常高,为O(10^K),因此只适用于K比较小的情况,例如K<=5。
数学方法是一种更高效的方法,我们可以通过数学计算来直接得到所有的K位重复数字。
假设K位重复数字为n,那么它可以表示为:n = m*(10^K-1)/(9),其中m是0到9之间的整数。
因为m是0到9之间的整数,所以我们只需要枚举m即可得到所有的K位重复数字。
def math_method(k):
for m in range(10):
n = m*(10**k-1)//9
print(n)
时间复杂度为O(10),显然比暴力枚举法要高效得多。
本文介绍了两种不同的方法,用于打印所有K位重复数字,其中暴力枚举法适用于K比较小的情况,而数学方法适用于K比较大的情况。需要根据实际情况选择合适的方法。