class Solution { public boolean winnerSquareGame(int n) { boolean[] dp = new boolean[n+1]; // dp[i] 表示有i个石子,alice先手是否可以赢 for(int i = 1; i * i <= n; i++) { dp[i*i] = true; } for(int i = 1; i <= n; i++) { if(!dp[i]) { for(int j = 1; j * j < i; j++) { if(!dp[i-j*j]) dp[i] = true; // 如果选完平方数个对手不能赢,则alice赢 } } } return dp[n]; } }