leetcode刷题292 Nim游戏 Nim Game(简单) Python Java

组合游戏系列1: Leetcode中的Minimax 和 Alpha Beta剪枝 本系列,我们来看看在一种常见的组合游戏——回合制棋盘类游戏中,如何用算法来解决问题。首先,我们会介绍并解决搜索空间较小的问题,引入经典的博弈算法和相关理论,最终实现在大搜索空间中的Deep RL近似算法。在此基础上可以理解AlphaGo的原理和工作方式。 本系列的第一篇,我们介绍3个Leetcode中的零和回合制游戏,从最初的暴力解法,到动态规划最终演变成博弈论里的经典算法: minimax 以及 alpha beta 剪枝。 第一篇 Leetcode中的Minimax 和 Alpha Beta剪枝 阅读详情

题目描述:

你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 
你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4 
输出: false 
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 
因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

解题思路:

Nim游戏的解题关键是寻找“必胜态”。

根据题设条件:

当n∈[1,3]时,先手必胜。
当n == 4时,无论先手第一轮如何选取,下一轮都会转化为n∈[1,3]的情形,此时先手必负。
当n∈[5,7]时,先手必胜,先手分别通过取走[1,3]颗石头,可将状态转化为n == 4时的情形,此时后手必负。
当n == 8时,无论先手第一轮如何选取,下一轮都会转化为n∈[5,7]的情形,此时先手必负。

......

以此类推,可以得出结论:

当n % 4 != 0时,先手必胜;否则先手必负。

在你的对手最后一次拿的时候,石头要是4个, 这时无论他拿1、2、3个,你都有石头拿。要保证这一点,你需要保证每次你拿完时石头的个数是4的倍数。那就意味着一开始石头的数目不是4的倍数。

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

以下是Java版本:

public class Solution {
    public boolean canWinNim(int n) {
        return n % 4 != 0;
    }
}

 

《Unity DOTS之ECS从入门到不香》(1)基本概念 文章目录一、什么是DOTS?二、什么是ECS?三、Hello World 一、什么是DOTS? Data Oriented Tech Stack(DOTS)是unity推出的多线程面向数据的技术堆栈 。它是一套高性能解决方案,包含三个部分: 1.ECS:ECS是一种有别于面向对象的编程模式,是面向CPU Cache友好的编程模式。要求代码都要按照 实体+组件+系统 的框架构建。官方链接 2.JobSystem:JobSystem是unity推出的一套先进的多线程任务管理系统,结合ECS可以获得最佳性能。当然 阅读详情

相关推荐

SAP打印错位问题终极解决指南:LP01设备格式设置全流程

本文详细解析了SAP系统中LP01设备打印错位问题的解决方案,重点介绍了SPAD事务码的配置流程和格式设置技巧。通过精准调整输出设备、设备类型和格式类型的匹配关系,有效解决'未定义格式'错误,确保打印内容准确对齐。文章还提供了高级排查方法和预防措施,帮助SAP管理员提升打印管理效率。

weixin_29311017的博客 390

python-leetcode-292. Nim 游戏

可以使用数学分析来解决这个问题。这个函数的时间复杂度是 O(1),因为它只是做了一个取模运算。

Lucy_wzw的博客 436

半导体制造中的通孔缺陷与冗余通孔技术解析

通孔(Via)是半导体制造中连接不同金属层的关键结构,其可靠性直接影响芯片良率。随着工艺节点演进至28nm及更先进制程,通孔缺陷导致的良率损失日益显著,主要表现为完全开路和高阻态两种失效模式。冗余通孔技术通过在关键位置增加备用连接,可有效提升芯片可靠性,其实现涉及物理冗余与电气冗余两种方案。该技术在7nm/5nm工艺中已证明可将通孔相关缺陷率降低10-100倍,但面临设计规则复杂性、规模处理效率和动态合规验证等工业化挑战。智能双切通孔插入流程通过动态DRC规则解析、奇偶层级并行处理和增量式验证等创新方法,显

weixin_35982453的博客 382

leetcode 292 Nim Game (Nim游戏) python3 多种思路(一行代码, 根据数学规律)

class Solution: def canWinNim(self, n): """ :type n: int :rtype: bool """ # method one 递归次数爆炸,不可行 # if 0 < n < 4: #

Jasmine_dream 615

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 305

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

292. Nim Game(python+cpp)

题目: 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 b...

小湉湉的博客 240

Briefings in Bioinformatics投稿经验分享

Briefings in Bioinformatics投稿经验分享

LiRongLu_的博客 3337

Leetcode-Nim游戏C++实现

假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false。每一回合,轮到的人拿掉 1 - 3 块石头。你们轮流进行自己的回合, 你作为先手。拿掉最后一块石头的人就是获胜者。抢最终目标前低4个即可。

Vanderbiol的博客 248

开发具有情感分析能力的AI Agent

本文将深入探讨开发具有情感分析能力的AI Agent的各个方面。我们将首先介绍情感分析的基础知识,包括定义、背景和应用领域。接着,我们将详细讲解情感分析的核心概念、数据处理方法和算法原理。随后,文章将展示如何设计情感分析系统架构,并进行项目实战,包括环境安装、源代码实现和案例分析。最后,我们将总结最佳实践和注意事项,为读者提供进一步学习的资源。情感分析(Sentiment Analysis),也称为意见挖掘,是自然语言处理(NLP)的一个分支。

SuperAGI2025 1146

FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现

采用软核进行串口升级的原因主要有以下几点:1、官方推荐:官方以前也推出了针对逻辑进行升级的程序《XAPP1081_QuickBoot》,但是从今年起(2024年)官方就停止更新相关例程了(详见下面截图),所以采用官方推荐的软核更新;2、简单并具有通用性:针对SPI或者BPI官方都有相关的IP,可应对市场上80%以上的FLASH,并且官方IP通用性极强,只需要修改几个参数就可以对不同厂家的芯片进行升级操作;

OpenFPGA的博客 1996

【精】LintCode领扣算法问题答案:1300. 巴什博弈

领扣LintCode算法问题答案-1300. 巴什博弈 目录1300. 巴什博弈描述样例 1:样例 2:题解鸣谢 1300. 巴什博弈 描述 你正在和朋友玩一个游戏:桌子上有一堆石头,每一次你们都会从中拿出1到3个石头。拿走最后一个石头的人赢得游戏。游戏开始时,你是先手。 假设两个人都绝对理性,都会做出最优决策。给定石头的数量,判断你是否会赢得比赛。 举例:有四个石头,那么你永远不会赢得游戏。不管拿几个,最后一个石头一定会被你的朋友拿走。 样例 1: 输入:n = 4 输出:False 解析:先手取走.

二当家的白帽子 980

【Unity的HDRP渲染管线下用Steam VR串流结合使用遇到的各种问题_SteamVR 插件和Pico串流助手】

当你启用"Mock Runtime"选项后,Unity将模拟一个虚拟的OpenXR运行时环境,并提供一些虚拟的设备和功能,让你能够进行开发和调试。在Unity中,SteamVR插件是一个由Valve提供的Unity插件,它允许开发者在Unity项目中集成SteamVR功能,以便支持SteamVR设备。OpenXR是一个跨平台的虚拟和增强现实(VR/AR)开发接口,它为开发者提供了一个统一的接口,用于访问不同VR/AR硬件设备和平台的功能。这个选项是用于模拟OpenXR运行时环境的功能。

暴走约伯的博客 2800

LeetCode刷题292-简单-Nim游戏

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

布小禅的博客 3927

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode-292-Nim游戏(java|python)

title: leetcode-292-Nim游戏(java|python) date: 2019-10-12 21:18:57 categories: leetcode tags: leetcode leetcode-292-Nim游戏(java|python) 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就...

weixin_42479155的博客 333

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[leetcode 292]Nim Game

Question: 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 st...

andun6858的博客 194

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

leetcode刷题记录之292

292、 Nim 游戏   你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。   你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。 示例: 输入: 4 输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走...

qq_41278826的博客 218

java and python学习——第一周leetcode刷题

因为是刚刚开始学习java和python语言,还不太熟悉应该怎么用这两种语言编程,所以就选择了leetcode上最简单的五道题来做。 344、Reverse String     这道题没有什么难度,是leetcode中最简单的一道,反转字符串。头和尾两两交换位置即可,开始将string转为char数组,最后再转换为string类型。 java版本: public class Soluti

yongyi_yang的博客 1199

【LeetCode】292. Nim Game 解题报告(Java & Python)

Reverse String[LeetCode]https://leetcode.com/problems/nim-game/Total Accepted: 66290 Total Submissions: 125590 Difficulty: EasyQuestion You are playing the following Nim Game with your friend: There

负雪明烛 1956

leetcode 292. Nim Game Nim游戏

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

JackZhangNJU的专栏 392

Leetcode----292.Nim Game(easy)

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 t

Txiaomiao的博客 608

【LeetCode】292 Nim Games (java实现)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138377的博客 108

从石头游戏到算法竞赛:用Python实战巴什博弈,搞定LeetCode上的取石子问题

本文深入解析巴什博弈(Bash Game)在算法竞赛中的应用,通过Python实战演示如何解决LeetCode上的取石子问题。从核心公式推导到动态规划解法,帮助读者掌握博弈论中的必胜态与必败态判断,提升算法竞赛解题效率。

weixin_30633405的博客 368

Leetcode_Easy_Medium题集

1. 292-Nim Game 分别列举1-5个石头的胜负情况,一次是1,1,1,0,1。后面石头数再增加的话,问题可以转化为考虑自己可否在第一次拿去1-3个石头,从而使得另一个人第一次去拿石头面对不得不输的情况。规律是逢4的整数倍输一次,其他情况都可以通过最优策略转化为使得对方必输的情况。

frankcreen的专栏 1115

11/27/2017 - 12/03/2017

11/27/2017 周一 整理COMP430的课程讲义和练习。 需要看M101P: MongoDB for Developers, 大概33小时,好多内容。。。 https://university.mongodb.com/courses/MongoDB/M101P/2016_ondemand_v32/syllabus 还需要看advanced schema design p

baidu_41085035的博客 228

Nim游戏(C++)

题目 给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略,先手是否必胜。 输入格式 第一行包含整数n。 第二行包含n个数字,其中第i个数字表示第i堆石子的数量。 输出格式 如果先手方必胜,则输出Yes。 否则,输出No。 数据范围 1≤n≤105, 1≤每堆石子数≤109 输入样例: 2 2 3 输出样例: Yes 思路 代码...

falldeep的算法世界 2万+
上一篇: leetcode刷题237 删除链表中的节点 Delete Node in a Linked List(简单) Python Java
下一篇: leetcode刷题344 反转字符串 Reverse String(简单) Python Java
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值