存在和对于一切的语言
import java.util.Arrays;
class Solution {
public boolean winnerSquareGame(int n) {
dp = new Boolean[n + 1];
dp2 = new Boolean[n + 1];
Arrays.fill(dp, null);
Arrays.fill(dp2, null);
dp[0] = false;
dp2[0] = true;
return dfs(n, true);
}
// dp[i] 表示以i为状态的Alice开始操作的结果
Boolean[] dp;
// dp2[i] 表示以i为状态的Bob开始操作的alice的结果
Boolean[] dp2;
public static void main(String[] args) {
Solution solution = new Solution();
boolean flag = solution.winnerSquareGame(2);
System.out.println(flag);
}
public boolean dfs(int n, boolean isAlice) {
if (isAlice) {
if (dp[n] != null) {
return dp[n];
}
// n 没有visited;判存在
// 存在一个i dfs(n, true) 为true
boolean flag = false;
for (int i = 1; i * i <= n && !flag; i++) {
// alice 拿了i*i后的结果
flag = flag | dfs(n - i * i, false);
}
dp[n] = flag;
return flag;
} else {
if (dp2[n] != null) {
return dp2[n];
}
// flag 表示alice赢的结果
boolean flag = true;
for (int i = 1; i * i <= n && flag; i++) {
// bob 拿了i*i后的结果
flag = flag & dfs(n - i * i, true);
}
dp2[n] = flag;
return flag;
}
}
}
标签:dp2,int,石子,leetcode,boolean,true,1510,dp,Boolean
From: https://www.cnblogs.com/fishcanfly/p/18238901