• 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

题目描述

0, 1, …, n-1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。
求出这个圆圈里剩下的最后一个数字。

示例:

输入: n =5, m =3
输出: 3
解释:
    圆圈初始状态: [0, 1, 2, 3, 4]
    删除顺序: 2014 → 最后剩下 3

解法思路:递推公式 + 动态规划

这个问题是经典的约瑟夫环问题(Josephus Problem)。

我们可以使用一个数学递推公式来快速求解: