📅  最后修改于: 2023-12-03 15:23:32.717000             🧑  作者: Mango
有一个序列,要求在其中查找第N个数字,该数字不是给定数字的倍数。这个问题可以用计数法或者判断法实现。
计数法的思路是,从1开始遍历每个数字,计算目前为止出现的不是给定数字倍数的数字个数,当达到N时,返回此时的数字。
def find_nth_not_multiple(n: int, m: int) -> int:
count = 0
num = 0
while True:
num += 1
if num % m != 0:
count += 1
if count == n:
return num
判断法的思路是,从1开始遍历每个数字,判断是否是给定数字的倍数,如果不是,计数器加1;如果是,继续下一个数字。当计数器达到N时,返回此时的数字。
def find_nth_not_multiple(n: int, m: int) -> int:
count = 0
num = 0
while True:
num += 1
if num % m != 0:
count += 1
if count == n:
return num
以上两种方法的时间复杂度都为O(N),因为它们要遍历N个数字才能找到答案。但是,判断法需要进行更多的判断操作,所以速度稍微慢一些。如果N很大,可以考虑优化算法,但是这里不做展开。