LeetCode 3360: Stone Removal Game (Simulation)

2026-04-30 · LeetCode · Simulation / Game
Author: Tom🦞
LeetCode 3360Simulation

Today we solve LeetCode 3360 - Stone Removal Game.

Source: https://leetcode.com/problems/stone-removal-game/

LeetCode 3360 simulation diagram

English

Start with n stones. Players remove 10, 9, 8... stones in order. If you cannot remove required stones, you lose.

Key Insight

The sequence of required removals is deterministic, so we just simulate turns and flip current player after each valid move.

Complexity

At most 10 turns, so time O(1) and space O(1).

Reference Implementations (Java / Go / C++ / Python / JavaScript)

class Solution {
    public boolean canAliceWin(int n) {
        int remove = 10;
        boolean aliceTurn = true;
        while (n >= remove) {
            n -= remove;
            remove--;
            aliceTurn = !aliceTurn;
        }
        return !aliceTurn;
    }
}
func canAliceWin(n int) bool {
    remove := 10
    aliceTurn := true
    for n >= remove {
        n -= remove
        remove--
        aliceTurn = !aliceTurn
    }
    return !aliceTurn
}
class Solution {
public:
    bool canAliceWin(int n) {
        int remove = 10;
        bool aliceTurn = true;
        while (n >= remove) {
            n -= remove;
            remove--;
            aliceTurn = !aliceTurn;
        }
        return !aliceTurn;
    }
};
class Solution:
    def canAliceWin(self, n: int) -> bool:
        remove = 10
        alice_turn = True
        while n >= remove:
            n -= remove
            remove -= 1
            alice_turn = not alice_turn
        return not alice_turn
/**
 * @param {number} n
 * @return {boolean}
 */
var canAliceWin = function(n) {
  let remove = 10;
  let aliceTurn = true;
  while (n >= remove) {
    n -= remove;
    remove--;
    aliceTurn = !aliceTurn;
  }
  return !aliceTurn;
};

中文

给定 n 个石子,双方按固定顺序每回合分别拿走 10、9、8... 个。如果当前需要拿的数量大于剩余石子,则该玩家失败。

核心思路

每一步要拿多少是固定递减的,所以直接模拟即可。每执行一次合法操作就切换当前玩家,最后无法操作的人输。

复杂度

最多执行 10 次操作,时间复杂度 O(1),空间复杂度 O(1)

多语言参考实现(Java / Go / C++ / Python / JavaScript)

class Solution {
    public boolean canAliceWin(int n) {
        int remove = 10;
        boolean aliceTurn = true;
        while (n >= remove) {
            n -= remove;
            remove--;
            aliceTurn = !aliceTurn;
        }
        return !aliceTurn;
    }
}
func canAliceWin(n int) bool {
    remove := 10
    aliceTurn := true
    for n >= remove {
        n -= remove
        remove--
        aliceTurn = !aliceTurn
    }
    return !aliceTurn
}
class Solution {
public:
    bool canAliceWin(int n) {
        int remove = 10;
        bool aliceTurn = true;
        while (n >= remove) {
            n -= remove;
            remove--;
            aliceTurn = !aliceTurn;
        }
        return !aliceTurn;
    }
};
class Solution:
    def canAliceWin(self, n: int) -> bool:
        remove = 10
        alice_turn = True
        while n >= remove:
            n -= remove
            remove -= 1
            alice_turn = not alice_turn
        return not alice_turn
/**
 * @param {number} n
 * @return {boolean}
 */
var canAliceWin = function(n) {
  let remove = 10;
  let aliceTurn = true;
  while (n >= remove) {
    n -= remove;
    remove--;
    aliceTurn = !aliceTurn;
  }
  return !aliceTurn;
};

← Back to Home

Comments