1025. Divisor Game | LeetCode Solution

 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 with 0 < x < n and n % x == 0.
  • Replacing the number n on the chalkboard with n - 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;
    }
};


Post a Comment

0 Comments