Leetcode之Nim Game

题 目:

      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-3块小石头,当玩家前面有4个石子的时候,它肯定会输,进一步,如果玩家前面有4的整数倍石子里,它也一定会输,因为对方也不是个省油的灯---它可以每次都跟你凑满4个小石头。由此观之,只要在你面前的石头数不是4的整数倍,且在第一局你移出石头后,让对方面对的石头数为4的整数倍,你都可以获得完全的胜利。


代码如下:

class Solution {
public:
    bool canWinNim(int n) {
       return (n % 4)== 0?0:1;
    }
};

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

题目很简单,先获得小小的信心。博客都快长草了,再不辛勤劳作和耕耘就要错过收获的季节了,加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值