Skip to content

LCR.187 破冰游戏

剑指 offer 62. 圆圈中最后剩下的数字

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= num <= 10^5
  • 1 <= target <= 10^6

解题思路

实现

数学 + 迭代

js
/**
 * @param {number} num
 * @param {number} target
 * @return {number}
 */
var iceBreakingGame = function (num, target) {
  let res = 0;
  for (let i = 2; i <= num; i++) {
    res = (res + target) % i;
  }
  return res;
};

数学 + 递归

js
/**
 * @param {number} num
 * @param {number} target
 * @return {number}
 */
var iceBreakingGame = function (num, target) {
  const dfs = (n, m) => {
    if (n === 1) return 0;
    let x = dfs(n - 1, m);
    return (m + x) % n;
  };
  return dfs(num, target);
};