g1501_1600.s1510_stone_game_iv.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
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