動機
原來這麼簡單!?
Problem
You are playing the following Nim Game with your friend:
- Initially, there is a heap of stones on the table.
- You and your friend will alternate taking turns, and you go first.
- On each turn, the person whose turn it is will remove 1 to 3 stones from the heap.
- The one who removes the last stone is the winner.
Given n
, the number of stones in the heap, return true
if you can win the game assuming both you and your friend play optimally, otherwise return false
.
Example 1:
Input: n = 4Output: falseExplanation: These are the possible outcomes:1. You remove 1 stone. Your friend removes 3 stones, including the last stone. Your friend wins.2. You remove 2 stones. Your friend removes 2 stones, including the last stone. Your friend wins.3. You remove 3 stones. Your friend removes the last stone. Your friend wins.In all outcomes, your friend wins.
Example 2:
Input: n = 1Output: true
Example 3:
Input: n = 2Output: true
Constraints:
1 <= n <= 231 - 1
Sol
拿走最後一顆的贏,一次最多3顆
如果只有 <=3
,那我們會贏
但到了4就會輸,
接著5~7,只要最後留4個,對面就會輸,但8個的話就是我們出事了
所以規律就是(3+1)
的倍數
class Solution:
def canWinNim(self, n: int) -> bool:
return n%(3+1)