leetcode292. Nim 游戏(博弈论 - java)

Nim 游戏

  • Nim 游戏
    • 题目描述
    • 博弈论
  • 上期经典算法

Nim 游戏

难度 - 简单
原题链接 - Nim游戏

题目描述

你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。
你们轮流进行自己的回合, 你作为先手 。
每一回合,轮到的人拿掉 1 - 3 块石头。
拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。

示例 1:
输入:n = 4
输出:false
解释:以下是可能的结果:

  1. 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
  2. 移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。
    3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。
    在所有结果中,你的朋友是赢家。

示例 2:
输入:n = 1
输出:true

示例 3:
输入:n = 2
输出:true

提示:
1 <= n <= 2e31 - 1

在这里插入图片描述

博弈论

在不知晓博弈论结论前,可以先通过找规律得到猜想,然后再从「何种情况下,先手会处于必胜态」的角度来进行分析。

根据题意,我们尝试从小范围数据的情况进行讨论:

  1. 如果落到先手的局面为「石子数量为 - 」的话,那么先手必胜;
  2. 如果落到先手的局面为「石子数量为 」的话,那么先手决策完(无论何种决策),交到后手的局面为「石子数量为 - 」,即此时后手必胜,对应先手必败(到这里我们有一个推论:如果交给先手的局面为 的话,那么先手必败);
  3. 如果落到先手的局面为「石子数量为 - 」的话,那么先手可以通过控制选择石子的数量,来使得后手处于「石子数量为 」的局面(此时后手必败),因此先手必胜;
  4. 如果落到先手的局面为「石子数量为 」的话,由于每次只能选 - 个石子,因此交由后手的局面为 - ,根据流程 我们知道此时先手必败;

到这里,我们猜想 当起始局面石子数量为 的倍数,则先手必败,否则先手必胜(即 n % 4 != 0 时,先手必胜)。

代码

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

上期经典算法

leetcode-413. 等差数列划分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

494. 目标和

494. 目标和 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;数组回溯法动态规划 参考代码&#xff1a;数组回溯法__494目标和__动态规划 经验吸取 原题链接&#xff1a; 494. 目标和 https://leetcode.cn/problems/target-sum/description/ 完成情况&#…

Android进阶之多级列表

遇到一个需求需要显示多级列表&#xff0c;因为界面是在平板上的&#xff0c;所以层级是从左向右往下排的&#xff0c;类似于 我当时的写法是在xml布局里一个个RecyclerView往下排的 当然前提是已经规定好最大的层级我才敢如此去写界面&#xff0c;如果已经明确规定只有两级或…

69 # 强制缓存的配置

强制缓存 强制缓存&#xff1a;以后的请求都不需要访问服务器&#xff0c;状态码为 200协商缓存&#xff1a;每次都判断一下&#xff0c;告诉是否需要找缓存&#xff0c;状态码为 304 默认强制缓存&#xff0c;不缓存首页&#xff08;如果已经断网&#xff0c;那这个页面应该…

Python发送QQ邮件

使用Python的smtplib可以发送QQ邮件&#xff0c;代码如下 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Headersender 111qq.com # 发送邮箱 receivers [222qq.com] # 接收邮箱 auth_code "abc" # 授权…

Dockerfile概念、镜像原理、制作及案例讲解

1.Docker镜像原理 Linux文件操作系统讲解 2.镜像如何制作 3.Dockerfile概念 Docker网址&#xff1a;https://hub.docker.com 3.1 Dockerfile关键字 4.案例

【数据结构OJ题】链表分割

原题链接&#xff1a;https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId8&&tqId11004&rp2&ru/activity/oj&qru/ta/cracking-the-coding-interview/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2…

AMD卡启动Stable Diffusion AI绘画的方法

WindowsAMD安装法 1.安装python 3.10.6&#xff0c;在python官网上下载安装程序&#xff0c;***重要*** 在安装的第一个窗口下方勾选“将python添加到path”。 2.安装git 3.WindowsAMD使用AUTOMATIC1111的directml这一个fork&#xff0c;在这个页面的第一段&#xff1a;https:/…

题目:2614.对角线上的质数

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2614. 对角线上的质数 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 遍历对角线上的元素&#xff0c;返回最大的质数或 0 即可。 解题代码&#xff1a; class Solution {public int dia…

e.target.value和 binding.value 区别

e.target.value 和 binding.value 都是在 Vue.js 中用于处理事件绑定时的值&#xff0c;但它们的使用场景和含义有所不同&#xff0c;分别用于普通的 DOM 事件和自定义指令。 e.target.value&#xff1a; 这是常用于原生 DOM 事件处理函数中的一个属性&#xff0c;用于获取事件…

爬虫逆向实战(十七)--某某丁简历登录

一、数据接口分析 主页地址&#xff1a;某某丁简历 1、抓包 通过抓包可以发现数据接口是submit 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个enPassword加密参数 请求头是否加密&#xff1f; 通过查看请求头可以发现有一个To…

【面试高频题】难度 3/5,字典树热门运用题

题目描述 这是 LeetCode 上的 「745. 前缀和后缀搜索」 &#xff0c;难度为 「困难」。 Tag : 「字典树」 设计一个包含一些单词的特殊词典&#xff0c;并能够通过前缀和后缀来检索单词。 实现 WordFilter 类&#xff1a; WordFilter(string[] words) 使用词典中的单词 words 初…

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.9 变量与常量

基本数据类型可以作为变量与常量使用,顾名思义&#xff0c;变量运行时可以改变其值&#xff0c;常量运行时不会改变其值。 常量分为整型常量、浮点型常量、字符常量、字符串常量和符号常量。 通常用#define来定义一个标识符来表示一个常量 用type name 常量来定义一个变量,…

无法将“环境变量”项识别为 cmdlet、函数、脚本文件或可运行程序的名称(pycharm)

无法将“配置的任何一个环境变量”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 记录解决“无法将“C:......conda.exe”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”以及“表达式或语句中包含意外的标记”的系列问题(VSCode开发环境)一、Conda.exe无法正常识…

ROS2 学习(三)话题

话题 节点之间的通信。 叫话题很形象。发布者发布一定数据类型的话题&#xff0c;订阅者订阅发布者。 订阅者发布者不唯一。 异步通信&#xff0c;适用于周期发布的数据而不是逻辑性强的数据。 .msg 格式的消息结构&#xff0c;一种通信接口。 每个话题 topic 有话题名&a…

【Java高级开发高频面试题】面试者角度的口述版

文章目录 1.具备扎实的Java基础集合HashMap底层工作原理HashMap版本问题HashMap并发修改异常HashMap影响HashMap性能的因素HashMap使用优化 SynchronizedThreadLocalAQS线程池JVM内存模型类加载机制与双亲委派垃圾回收算法、垃圾回收器、空间分配担保策略引用计数器算法、可达性…

创建 Web 内容目录

创建 Web 内容目录 按照下方所述&#xff0c;创建一个名为 /home/curtis/ansible/webcontent.yml 的 playbook &#xff1a; 该 playbook 在 dev 主机组中的受管节点上运行 创建符合下列要求的目录 /webdev &#xff1a; 所有者为 webdev 组 具有常规权限&#xff1a;ownerread…

Nginx反向代理

目录 一.简介1.反向代理 二.案例1.案例12.案例2 一.简介 1.反向代理 1.1反向代理&#xff1a; 是指代理服务器来接收Internet上的客户端请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给客户端。此时代理服务器对外就表现为一…

循环队列的实现(c语言)

前言 循环队列是队列的一种特殊的结构&#xff0c;在生产者——消费者模型中常常使用它&#xff0c; 它在逻辑上是一个环形的连续的结构。在物理可以使用数组来实现。 目录 1.循环队列的逻辑结构 2.空的循环队列和满的循环队列 3.循环队列插入和删除 4.代码实现 …

浅谈Redis的maxmemory设置以及淘汰策略

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享&#xff0c;打开手机app&#xff0c;额外获得1T空间 https://dr…

音视频实时通话解决方案

1、问题提出 想要实现音视频通话,对于大部分人可能会觉得很难,但是实际上,有些事情并没有大家想的那样困难,只要功夫深,铁杵磨成针。 机缘巧合下,在业务中,我也遇到了一个业务场景需要实现音视频通话,我们不可能自己从零开始干,我本次用到的核心是WebRTC。 2、WebRT…