Coins in a Line
Last updated
Last updated
o o o | o o oo | o o opublic class Solution {
/**
* @param n: an integer
* @return: a boolean which equals to true if the first player will win
*/
public boolean firstWillWin(int n) {
boolean[] dp = new boolean[n + 1];
boolean[] flag = new boolean[n + 1];
return search(n, dp, flag);
}
boolean search(int i, boolean[] dp, boolean[] flag) {
if (flag[i] == true) {
return dp[i];
}
if (i == 0) {
dp[i] = false;
} else if (i == 1) {
dp[i] = true;
} else if (i == 2) {
dp[i] = true;
} else {
dp[i] = ! (search(i - 1, dp, flag) && search(i - 2, dp, flag));
}
flag[i] = true;
return dp[i];
}
}public class Solution {
/**
* @param n: an integer
* @return: a boolean which equals to true if the first player will win
*/
public boolean firstWillWin(int n) {
// write your code here
int []dp = new int[n+1];
return MemorySearch(n, dp);
}
boolean MemorySearch(int n, int []dp) { // 0 is empty, 1 is false, 2 is true
if(dp[n] != 0) {
if(dp[n] == 1)
return false;
else
return true;
}
if(n <= 0) {
dp[n] = 1;
} else if(n == 1) {
dp[n] = 2;
} else if(n == 2) {
dp[n] = 2;
} else if(n == 3) {
dp[n] = 1;
} else {
if((MemorySearch(n-2, dp) && MemorySearch(n-3, dp)) ||
(MemorySearch(n-3, dp) && MemorySearch(n-4, dp) )) {
dp[n] = 2;
} else {
dp[n] = 1;
}
}
if(dp[n] == 2)
return true;
return false;
}
}public class Solution {
/**
* @param n: an integer
* @return: a boolean which equals to true if the first player will win
*/
public boolean firstWillWin(int n) {
if (n % 3 == 0) {
return false;
}
return true;
}
}