LeetCode算法题-Nim Game(Java实现)

这是悦乐书的第203次更新,第213篇原创

01 看题和准备

你和你的朋友正在玩下面的Nim游戏:桌子上有一堆石头,每次你轮流去除1到3块石头。 移除最后一块石头的人将成为赢家。 你是第一个取出石块的。

你们两个都非常聪明,并且拥有最佳的游戏策略。 编写一个函数来确定你是否可以在堆中的石头数量的情况下赢得游戏。例如:

输入:4
输出:false

说明:如果堆中有4块石头,那么你永远不会赢得游戏;无论你删除了1,2或3块石头,你的朋友都能去除它。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

这道题有点像排列组合,给定一个整数n,在1到3之间进行随机组合,判断能否在奇数次移除石头的组合下,将n变为0。当n等于1,2,3时,你都可以一次将其移除。当n等于4的时候,你无论怎么移都会输。当n等于5的时候,第一次移动一块,剩下4块给另外一个人移除,另外一个人就会陷入4的死局,你就能在第二次移除的时候赢,当n等于6和7的时候,结局是一样的。当n等于8的时候,结局和n等于4一样,怎么选都会输。对此,只要是4的倍数,都是输局,所以简单的判断就变成了n对4取余是否等于0。

public boolean canWinNim(int n) {
    if (n <= 4) {
        return n == 1 || n == 2 || n == 3;
    }
    return n%4 != 0;
}

此解法的时间复杂度是O(1),空间复杂度是O(1)

03 小结

算法专题目前已连续日更超过二个月,算法题文章69+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 1...
    达微阅读 19,986评论 0 28
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,475评论 11 349
  • 5月22日,“科技匠心 U你共创”Ulord(优壹)在北京钓鱼台国宾馆召开发布会,国务院发展研究中心原副主任侯云...
    沉淀我心阅读 2,732评论 3 1
  • 我当然是愿意去总公司了,并且我已经参观过了总公司新的办公楼,我已经憧憬好了未来的工作环境。于是在L表示希望我继续在...
    菁菁TJ阅读 4,007评论 1 51
  • 每个人光鲜表面的背后都有一段不为人知故事,当人们看到莫同在互联网行业做得风生水起的时候,谁能想到他曾经是个重度烧伤...
    叶塞尼娅阅读 4,760评论 0 0

友情链接更多精彩内容