📌  相关文章
📜  查找包含数字k或可被k整除的第n个数字。(1)

📅  最后修改于: 2023-12-03 14:55:33.160000             🧑  作者: Mango

包含数字k或可被k整除的第n个数字

我们需要编写一个函数来查找包含数字k或可被k整除的第n个数字。

函数签名
def find_nth_number(k: int, n: int) -> int:
    pass
参数说明
  • k:int类型,表示需要查找的数字。
  • n:int类型,表示需要查找的数字的序号(从1开始)。
返回值说明
  • 返回查找到的数字(int类型)。
例子

我们来看几个例子:

assert find_nth_number(1, 1) == 1
assert find_nth_number(1, 2) == 10
assert find_nth_number(3, 3) == 3
assert find_nth_number(3, 4) == 6
assert find_nth_number(3, 5) == 9
思路分析

我们可以采用暴力枚举来解决此问题:

  • 从1开始遍历每个数字,直到找到第n个符合条件的数字;
  • 对于每个数字,我们可以将其转换为字符串,然后判断字符串中是否含有k或是否能够被k整除。
代码实现
def find_nth_number(k: int, n: int) -> int:
    num = 0
    cnt = 0
    
    while cnt < n:
        num += 1
        if str(k) in str(num) or num % k == 0:
            cnt += 1
    
    return num
时间复杂度

该算法的时间复杂度为O(n^2),其中n为查找的数字的序号。

空间复杂度

该算法的空间复杂度为O(1)。

可优化点

该算法的效率比较低,可以通过一些优化来提高效率,例如:

  • 对于每个数字,我们并不需要每次都将其转换为字符串来进行判断,可以采用数位分离的方式来提高效率;
  • 需要查找的数字并不是连续的,可以采用一些数学方法来跳过一些不符合条件的数字,提高效率。