Hard

Stone Game IVC++

Full explanation · Time O(n * sqrt(n)) · Space O(n)

// Time:  O(n * sqrt(n))
// Space: O(n)

class Solution {
public:
    bool winnerSquareGame(int n) {
        vector<bool> dp(n + 1);
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j * j <= i; ++j) {
                if (!dp[i - j * j]) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp.back();
    }
};