今天在LeetCode的看到一到题目

这道题目有点坑,没有思路的话容易钻牛角。

刚刚开始时,我想的是直接用while循环来模拟计算,后来觉得这么好麻烦,也有复制的逻辑在里面。后面我推导了一下

以下是我的推导过程,爱丽丝简称 A 鲍勃 简称B

当num=2时,A=1-->num=num-1=1,A赢

当num=3时,A只能出1,-->num=num-1=2,此时B正好处于num=2的情况,所以B可以用之前A的策略,B赢

当num=4时,A可以出1 或 2,但是为了赢,A必须让B处于输的情况,也就是num=3的情况。所以A出1,-->num=num-1=3

当num=5时,A可以出1,-->num=num-1=4,此时B正好处于num=4的情况,B赢

当num=6时,A可以出1,2,3,但是A为了赢,必须让B处于必输的情况下,A出1-->num=num-1,当B出时,num=5,B输。

以此类推,

我们可以得出结论

当N%2==0时,先出的赢

当N%2!=0时,后出的赢


所以这道题目的解为

    public boolean divisorGame(int N) {
if(N%2==0){
return true;
}else{
return false;
}
}

就是这么简单。

我之前还做过另一个类似的题目。

题目好像是:

两个人,轮流报数 1或2 ,然后不停往上加,谁加到30谁就赢。

其实用的是同样的思想。

这种思想和博弈论一样,都是在最理性的情况下进行分析的,

bilibili有好多类似的视频 av7852097 红眼岛岛民自杀事件

海盗分金什么的

最新文章

  1. 关于一道数据库例题的解析。为什么σ age>22 (πS_ID,SCORE (SC) ) 选项是错的?
  2. 编译Ansj之Solr插件
  3. js实现继承
  4. java 使用cookie记录用户上一次访问的时间 记住 用户的 登录名
  5. OC正则表达式的简单使用
  6. Redis桌面管理工具 RedisDesktopManager
  7. Guava文档翻译之ListenableFuture
  8. php文件锁解决少量并发问题
  9. [XML] C#ResourceManagerWrapper帮助类 (转载)
  10. Excel进行项目规划的好处
  11. ios简单更改系统TabBar的高度
  12. HTML 标签小细节
  13. Java框架spring 学习笔记(十四):注解aop操作
  14. Android中getDrawable和getColor过时的替代方法
  15. C#对接----韵达开发平台--取电子面单
  16. JavaScript中的Generator函数
  17. Velocity Obstacle
  18. JavaScript快速入门-ECMAScript函数
  19. bellman-ford算法(判断有没有负环)
  20. window.parent 与 Window.top

热门文章

  1. 算法与数据结构基础 - 深度优先搜索(DFS)
  2. Spring 梳理 - JavaConfig实战(spring MVC)-原创
  3. Spring Environment的加载
  4. java+maven+jenkins+svn构建
  5. idea 环境变量设置编码
  6. springboot 整合ehcache缓存
  7. 基 B/S 平台的机房监控云平台-U位篇
  8. MongoDB 学习笔记之 Aggregation Pipeline
  9. SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
  10. 微人事 star 数超 10k,如何打造一个 star 数超 10k 的开源项目