↓快轉到主要內容
  1. LeetCode/

LeetCode 292: Nim Game

·1 分鐘· ·
LeetCode Easy Math Brainteaser Minimax-Algorithm Game-Theory
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Accepted(一次通過)

解題思路
#

先觀察小的情況(Math 模板四):剩 1 到 3 顆可以一次拿完,贏;剩 4 顆不管拿幾顆,對手都剩 1 到 3 顆,輸。一般來說,面對 4 的倍數時,你拿 x 顆,對手就拿 4 - x 顆,讓你一直面對 4 的倍數;不是 4 的倍數時,你可以拿到讓對手面對 4 的倍數。

我的解法
#

class Solution:
    def canWinNim(self, n: int) -> bool:
        return n % 4 != 0

複雜度
#

時間 O(1),空間 O(1)。

要特別避免的錯誤
#

  • n 到 2^31,DP 會超時也會超出記憶體,要找規律。

面試口說整理
#

我先看小的情況,發現剩 4 的倍數的人一定輸,因為對手每次都能拿成總和 4,所以 n 不是 4 的倍數時先手贏。時間 O(1)。

相關文章

LeetCode 263: Ugly Number
·1 分鐘
LeetCode Easy Math
LeetCode 263 解題筆記:正數才可能是 ugly number,把因數 2、3、5 全部除掉,剩下 1 就是
LeetCode 326: Power of Three
·1 分鐘
LeetCode Easy Math Recursion
LeetCode 326 解題筆記:一直除以 3 直到除不盡,剩 1 就是;不用迴圈的話,3^19 能被 n 整除就是
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 342: Power of Four
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 342 解題筆記:先確認是 2 的次方,再確認那個 1 在偶數位:n & 0x55555555 != 0,或 n % 3 == 1
LeetCode 367: Valid Perfect Square
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 367 解題筆記:在 [1, num] 上二分找 mid² == num,不用 sqrt
LeetCode 405: Convert a Number to Hexadecimal
·1 分鐘
LeetCode Easy Math String Bit-Manipulation
LeetCode 405 解題筆記:負數先加上 2^32 變成補數,再每次取 4 個位元(% 16)轉成十六進位;0 要特別處理