📅  最后修改于: 2023-12-03 15:25:32.091000             🧑  作者: Mango
有 $n$ 个人围成一圈,给定一个数字 $m$ ,要求从第一个人开始报数,报到 $m$ 的人出圈,然后下一个人从 $1$ 开始继续报数,直到剩下最后一个人。
为了获得幸福,那个幸运的人要活着出圈。
递推的思路是从 $n=1$ 开始,逐渐递推到 $n$ 的情况。具体做法是:
该方法的时间复杂度为 $O(n)$。
递归的思路是从 $n$ 开始递归到 $1$ 的情况,最后得到 $n$ 的答案。具体做法是:
该方法的时间复杂度为 $O(n^2)$。
def lucky_survivor(n: int, m: int) -> int:
f = [0] * n
for i in range(2, n + 1):
f[i - 1] = (f[i - 2] + m) % i
return f[n - 1] + 1
def lucky_survivor(n: int, m: int) -> int:
if n == 1:
return 0
else:
return (lucky_survivor(n - 1, m) + m) % n
该问题可以用递推或递归的方式求解,但递归的时间复杂度较高。在实际应用中,建议使用递推的方式求解。