1. 程式人生 > >leetcode 1025. 除數博弈(Divisor Game)

leetcode 1025. 除數博弈(Divisor Game)

class leet true als 個數 解釋 toc 輸出 提示

目錄

  • 題目描述:
  • 示例 1:
  • 示例 2:
  • 解法:

題目描述:

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。

最初,黑板上有一個數字 N 。在每個玩家的回合,玩家需要執行以下操作:

  • 選出任一 x,滿足 0 < x < NN % x == 0
  • N - x 替換黑板上的數字 N

如果玩家無法執行這些操作,就會輸掉遊戲。

只有在愛麗絲在遊戲中取得勝利時才返回 true,否則返回 false。假設兩個玩家都以最佳狀態參與遊戲。

示例 1:

輸入:2
輸出:true
解釋:愛麗絲選擇 1,鮑勃無法進行操作。

示例 2:

輸入:3
輸出:false
解釋:愛麗絲選擇 1,鮑勃也選擇 1,然後愛麗絲無法進行操作。

提示:

  1. 1 <= N <= 1000

解法:

class Solution {
public:
    bool divisorGame(int N) {
        vector<bool> flag(1001, false);
        flag[2] = true;
        if(N <= 3){
            return flag[N];
        }else{
            for(int i = 4; i <= N; i++){
                bool canWin = false;
                for(int j = 1; j < i; j++){
                    if(i%j == 0 && flag[i-j] == false){
                        canWin = true;
                        break;
                    }
                }
                if(canWin){
                    flag[i] = true;
                }
            }
            return flag[N];
        }
    }
};

leetcode 1025. 除數博弈(Divisor Game)