leetcode —— 1025. 除数博弈
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。
最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:
选出任一 x,满足 0 < x < N 且 N % x == 0 。
用 N - x 替换黑板上的数字 N 。
如果玩家无法执行这些操作,就会输掉游戏。
只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。
示例 1:
输入:2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divisor-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
——————————
解题思路:使用动态规划,dp[i]表示当N=i时,爱丽丝是胜利还是失败的情况。
对于dp[i],dp[1]到dp[i-1]的情况都是已知的,所以取j从1遍历到i-1,如果i%j==0同时dp[j]==False,那么在dp[i]的情况下爱丽丝是肯定胜利的,因为爱丽丝可以从i跳到j,因为dp[j]=False,所以轮到鲍勃的时候鲍勃是失败的。
因此可以得到状态转移方程:
for j in range(1,i):if i%j==0 and dp[j]==False:dp[i] = Truebreak
最后我们只需要返回最终的dp[N]就可以了。其Python代码如下:
class Solution:def divisorGame(self, N: int) -> bool:if N==1: # 特殊情况return Falselists = [False for _ in range(N+1)] # 用于保存前面的状态lists[2] = Truefor i in range(3,N+1):for j in range(1,i):if i%j==0 and lists[i-j]==False:lists[i] = Truebreakreturn lists[N]
leetcode —— 1025. 除数博弈相关推荐
- leetcode - 1025. 除数博弈
1025. 除数博弈 ------------------------------------------ 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个 ...
- LeetCode 1025. 除数博弈(动态规划)
1. 题目 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N ...
- Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)
Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game) 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需 ...
- 1025. 除数博弈
2020.7.24 LeetCode 题目描述 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 ...
- 力扣1025.除数博弈
题目描述 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局.最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % ...
- [LeetCode]动态规划求解博弈问题
博弈论是有趣又有用的知识,可以用来预测在特定的规则下,人们会做出怎样的行为,又会导致怎样的结果.利用博弈论来指导人们的行事法则甚至商业操作,比如著名的囚徒困境就被很好的利用在了商业竞争上.同样,Lee ...
- 一个有趣的博弈或推理游戏——除数博弈(动态规划与归纳法)
除数博弈 除数博弈(Divisor Game)是我在leetcode上遇到的一个题目,它的描述如下: Alice and Bob take turns playing a game, with Ali ...
- [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
[问题描述][中等] [解答思路] 1. 数学证明 找规律 时间复杂度:O(1) 空间复杂度:O(1) 2. 递推 时间复杂度:O(N) 空间复杂度:O(1) class Solution {publ ...
- Leetcode每日一题:1025.divisor-game(除数博弈)
解题思路:这个很无语啊,看懂题的都知道偶数爱丽丝赢,奇数爱丽丝输: 引用评论的一句话:洋洋洒洒十来行,一看题解就一行 C++代码: bool divisorGame(int N) {return !( ...
最新文章
- python怎么设置环境变量_百度经验_如何在Python中设置环境变量
- DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- 学习使用markdown(markdown篇)
- OpenCV进口重建Import Reconstruction
- J2SE理解之一:声明和访问控制
- c语言常见错误代码释义,C语言常见错误代码释义解析.doc
- 【转】C++ GetLastError() 返回值对应表
- Appium Java
- 工具使用-----Jmeter的基础用法
- mac 环境 Android Studio升级后Gradle project Sync Failed解决方法
- springboot制作补丁包通用解决方案
- [转] 如何制作华为手机的刷机包
- 对象图(Object Diagram)
- webrtc 研究-带宽控制
- 埃及分数c语言实训报告,C语言实例 将真分数分解为埃及分数
- Android深入浅出系列课程---Lesson7 LLY110426_Android系统启动
- Oracle GL - 使用标准程序获取/创建CCID
- 微信小程序之本地网络服务器配置
- VLD的安装使用及其问题
- html使用a跳转页面,HTML之a标签的使用