1025.除数博弈
记录自己是如何做:
1.dp
public boolean divisorGame(int N) {
if(N<=3){
if(N == 1) return false;
if(N == 2) return true;
if(N == 3) return false;
}
boolean[] dp = new boolean[N];//谁先手选择就是谁选择之后的最好状态
dp[0] = false;dp[1] = true;dp[2] = false;
for(int i = 3;i<N;i++){
List<Integer> list = quotient(i+1);
dp[i] = false;
for(int tmp : list){
if(!dp[tmp-1]){
dp[i] = true;
break;
}
}
}
return dp[N-1];
}
public static List quotient(int n){
List<Integer> list = new ArrayList<>();
for(int i = 1;i<n/2;i++){
if(n%i == 0)
list.add(n-i);
}
return list;
}
2.数学方法:
public boolean divisorGame(int N) {
if(N%2 == 0) return true;
return false;
}