问题描述:

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个stone时,自己拿走就赢了,有2个stones时,自己拿到两个就赢了,有3个stones时,自己拿走3个仍然赢了。

但是,当有4个stone时,无论你拿到1,2,3个stone,仍然剩下1-3个stone,这样对手就赢了。注意,关键是“剩下”了几个,只要剩下的是1,2,3个stone,

自己就会赢。如果有5-7个stones时,只要保证剩下4个给对手,让对手面对“4”的必输困境就会赢。直到有8个stones,你无论如何不能使对方面对剩下4个的困局,因为你最多只能拿三个。以此类推,必输的时候都是4的倍数。


代码:

class Solution(object):
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n % 4 != 0