All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1501_1600.s1510_stone_game_iv.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1501_1600.s1510_stone_game_iv;

// #Hard #Dynamic_Programming #Math #Game_Theory
// #2022_04_09_Time_12_ms_(85.75%)_Space_39.2_MB_(96.63%)

/**
 * 1510 - Stone Game IV\.
 *
 * Hard
 *
 * Alice and Bob take turns playing a game, with Alice starting first.
 *
 * Initially, there are `n` stones in a pile. On each player's turn, that player makes a _move_ consisting of removing **any** non-zero **square number** of stones in the pile.
 *
 * Also, if a player cannot make a move, he/she loses the game.
 *
 * Given a positive integer `n`, return `true` if and only if Alice wins the game otherwise return `false`, assuming both players play optimally.
 *
 * **Example 1:**
 *
 * **Input:** n = 1
 *
 * **Output:** true
 *
 * **Explanation:** Alice can remove 1 stone winning the game because Bob doesn't have any moves.
 *
 * **Example 2:**
 *
 * **Input:** n = 2
 *
 * **Output:** false
 *
 * **Explanation:** Alice can only remove 1 stone, after that Bob removes the last one winning the game (2 -> 1 -> 0).
 *
 * **Example 3:**
 *
 * **Input:** n = 4
 *
 * **Output:** true
 *
 * **Explanation:** n is already a perfect square, Alice can win with one move, removing 4 stones (4 -> 0).
 *
 * **Constraints:**
 *
 * *   1 <= n <= 105
**/
public class Solution {
    public boolean winnerSquareGame(int n) {
        boolean[] dp = new boolean[n + 1];
        for (int i = 1; i < n + 1; i++) {
            for (int k = 1; k * k <= i; k++) {
                if (!dp[i - k * k]) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy