社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数。请返回游戏结束时最后一位成员的编号。

示例 1:

**输入:**num = 7, target = 4
**输出:**1

示例 2:

**输入:**num = 12, target = 5
**输出:**0

提示:

1 <= num <= 10^5

1 <= target <= 10^6

可以用循环链表来模拟

在最后一定是一个结点,索引为0

倒推回去,先把循环展开,倒数第二轮是两个结点,索引为target,此时考虑循环索引就是target%2

倒数第三轮三个结点,索引为(target+第二轮索引)%3

同理 ans = (ans + target) % i

1
2
3
4
5
6
7
8
9
class Solution {
public : int iceBreakingGame(int num, int target) {
int ans = 0;
for (int i = 2; i <= num; i++) {
ans = (ans + target) % i;
}
return ans;
}
};