📌  相关文章
📜  以很大的数字打印所有K位重复数字(1)

📅  最后修改于: 2023-12-03 15:36:22.419000             🧑  作者: Mango

以很大的数字打印所有K位重复数字

介绍

本文介绍如何以很大的数字打印所有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比较大的情况。需要根据实际情况选择合适的方法。