1025. Divisor Game | LeetCode Solution
Alice and Bob take turns playing a game, with Alice starting first.
Initially, there is a number n
on the chalkboard. On each player's turn, that player makes a move consisting of:
- Choosing any
x
with0 < x < n
andn % x == 0
. - Replacing the number
n
on the chalkboard withn - x
.
Also, if a player cannot make a move, they lose the game.
Return true
if and only if Alice wins the game, assuming both players play optimally.
Example 1:
Input: n = 2 Output: true Explanation: Alice chooses 1, and Bob has no more moves.
Example 2:
Input: n = 3 Output: false Explanation: Alice chooses 1, Bob chooses 1, and Alice has no more moves.
Constraints:
1 <= n <= 1000
class Solution {
public:
int dp[1001];
int helper(int n){
if(dp[n]!=-1)return dp[n];
else{
for(int i=1; i<n; i++){
if(n%i==0){
if(dp[n-i]==-1)
dp[n-i]=helper(n-1);
if(dp[n-i]==0)return 1;
}
}
return 0;
}
}
bool divisorGame(int n) {
memset(dp,-1,sizeof dp);
return helper(n);
}
};
class Solution {
public:
int dp[1001];
int helper(int n){
if(n==1)return 0;
if(dp[n]!=-1)return dp[n];
else{
for(int i=1; i*i<=n; i++){
if(n%i==0){
if(helper(n-i)==0)return dp[n]=1;
if((i!=1) && helper(n-(n/i)==0))return dp[n]=1;
}
}
}
return dp[n]=0;
}
bool divisorGame(int n) {
memset(dp,-1,sizeof dp);
return helper(n);
}
};
class Solution {
public:
bool divisorGame(int n) {
return n%2==0;
}
};
0 Comments
If you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.