爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

最初,黑板上有一个数字 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. 除数博弈相关推荐

  1. leetcode - 1025. 除数博弈

    1025. 除数博弈 ------------------------------------------ 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个 ...

  2. LeetCode 1025. 除数博弈(动态规划)

    1. 题目 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N ...

  3. Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)

    Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game) 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需 ...

  4. 1025. 除数博弈

    2020.7.24 LeetCode 题目描述 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 ...

  5. 力扣1025.除数博弈

    题目描述 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局.最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % ...

  6. [LeetCode]动态规划求解博弈问题

    博弈论是有趣又有用的知识,可以用来预测在特定的规则下,人们会做出怎样的行为,又会导致怎样的结果.利用博弈论来指导人们的行事法则甚至商业操作,比如著名的囚徒困境就被很好的利用在了商业竞争上.同样,Lee ...

  7. 一个有趣的博弈或推理游戏——除数博弈(动态规划与归纳法)

    除数博弈 除数博弈(Divisor Game)是我在leetcode上遇到的一个题目,它的描述如下: Alice and Bob take turns playing a game, with Ali ...

  8. [Leetcode][第1025题][JAVA][除数博弈][数学][递推]

    [问题描述][中等] [解答思路] 1. 数学证明 找规律 时间复杂度:O(1) 空间复杂度:O(1) 2. 递推 时间复杂度:O(N) 空间复杂度:O(1) class Solution {publ ...

  9. Leetcode每日一题:1025.divisor-game(除数博弈)

    解题思路:这个很无语啊,看懂题的都知道偶数爱丽丝赢,奇数爱丽丝输: 引用评论的一句话:洋洋洒洒十来行,一看题解就一行 C++代码: bool divisorGame(int N) {return !( ...

最新文章

  1. python怎么设置环境变量_百度经验_如何在Python中设置环境变量
  2. DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  3. 学习使用markdown(markdown篇)
  4. OpenCV进口重建Import Reconstruction
  5. J2SE理解之一:声明和访问控制
  6. c语言常见错误代码释义,C语言常见错误代码释义解析.doc
  7. 【转】C++ GetLastError() 返回值对应表
  8. Appium Java
  9. 工具使用-----Jmeter的基础用法
  10. mac 环境 Android Studio升级后Gradle project Sync Failed解决方法
  11. springboot制作补丁包通用解决方案
  12. [转] 如何制作华为手机的刷机包
  13. 对象图(Object Diagram)
  14. webrtc 研究-带宽控制
  15. 埃及分数c语言实训报告,C语言实例 将真分数分解为埃及分数
  16. Android深入浅出系列课程---Lesson7 LLY110426_Android系统启动
  17. Oracle GL - 使用标准程序获取/创建CCID
  18. 微信小程序之本地网络服务器配置
  19. VLD的安装使用及其问题
  20. html使用a跳转页面,HTML之a标签的使用

热门文章

  1. POJ 1163 The Triangle
  2. TDengine与OpenTSDB对比测试
  3. Spring AMQP 教程
  4. OSPF——通告静态缺省(默认)路由(含配置)详解
  5. 高性能异步批量ping的golang实现
  6. docker 安装 jdk,配置环境变量
  7. 函数式编程 -- 纯函数、柯里化函数
  8. 初识函数式编程(Functional Programming,FP)
  9. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
  10. ctk 组件创建 ui_创建可重复使用的UI组件的提示和技巧