[leetcode292]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个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
        


全部评论

相关推荐

点赞 评论 收藏
分享
07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
07-17 11:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务