You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.
Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.
For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.
思路:找规律
石子数 | 拿法 | 结果 |
---|---|---|
1 | 直接拿1个 | 赢 |
2 | 直接拿2个 | 赢 |
3 | 直接拿3个 | 赢 |
4 | 怎么拿都输 | 输 |
5 | 拿1个给对方留4个 | 赢 |
6 | 拿2个给对方留4个 | 赢 |
… | … | … |
规律就是,如果石子个数是4的倍数,则输,否则赢。
Python 代码:
class Solution(object):
def canWinNim(self, n):
"""
:type n: int
:rtype: bool
"""
return n % 4 != 0