LeetCode 1025. 除數(shù)博弈 Divisor Game

【題目描述】
愛麗絲和鮑勃一起玩游戲,他們輪流行動(dòng)。愛麗絲先手開局。

最初,黑板上有一個(gè)數(shù)字 N 。在每個(gè)玩家的回合,玩家需要執(zhí)行以下操作:

  • 選出任一 x,滿足 0 < x < N 且 N % x == 0 。
  • 用 N - x 替換黑板上的數(shù)字 N 。
    如果玩家無(wú)法執(zhí)行這些操作,就會(huì)輸?shù)粲螒颉?/li>

只有在愛麗絲在游戲中取得勝利時(shí)才返回 True,否則返回 false。假設(shè)兩個(gè)玩家都以最佳狀態(tài)參與游戲。

【示例1】

輸入:2
輸出:true
解釋:愛麗絲選擇 1,鮑勃無(wú)法進(jìn)行操作。

【示例2】

輸入:3
輸出:false
解釋:愛麗絲選擇 1,鮑勃也選擇 1,然后愛麗絲無(wú)法進(jìn)行操作。

【提示】
1 <= N <= 1000

【解1】數(shù)學(xué)歸納法
1、仔細(xì)讀幾遍題意,其實(shí)這是一道數(shù)學(xué)題,歸納法可以解出
2、題目要求 選出的x 必須滿足 0 < x < N 且 N % x == 0,然后 N = N - x
3、如果雙方玩家選出的數(shù)字x 不能滿足0 < x < N 且 N % x == 0,就輸?shù)舯荣?/p>

思路:偶數(shù)先手贏
1、愛麗絲先手,只要每次愛麗絲操作的時(shí)候 N為偶數(shù),那么她就穩(wěn)贏,因?yàn)榕紨?shù)的話,愛麗絲可以一直選擇1,留給鮑勃的數(shù)字一直是奇數(shù),鮑勃只能選擇1,那么最后數(shù)字N都會(huì)走到為2時(shí),愛麗絲選擇1就會(huì)贏。
2、所以就是判斷給出的數(shù)是奇數(shù)還是偶數(shù)

代碼就一行:

func divisorGame(_ N: Int) -> Bool {
    return N%2 == 0
}

【解2】
動(dòng)態(tài)規(guī)劃

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容