这是小川的第382次更新,第411篇原创
java
今天介绍的是LeetCode算法题中Easy级别的第244题(顺位题号是1025)。Alice和Bob轮流玩游戏,Alice首先出发。算法
最初,黑板上有一个数字N
. 在每一个玩家的回合中,该玩家进行如下操做:数据结构
选择0 < x <N
且N%x == 0
的任何x
。code
用N - x
替换黑板上的数字N
.游戏
此外,若是玩家没法移动,他们将输掉游戏。class
当且仅当Alice赢得比赛时才返回True,假设两个玩家都达到最佳状态。数据结构与算法
例如:数据
输入:2
输出:true
说明:Alice选择1,Bob没有更多动做。移动
输入:3
输出:false
说明:Alice选择1,Bob选择1,Alice再也不移动。di
注意:
N=1
,0 < x < 1且1%x == 0,没有符合的数,Alice输。
N=2
,0 < x < 2且2%x == 0,Alice取1,N变成1,轮到Bob,Bob没法选择合适的数,Alice赢。
N=3
,0 < x < 3且3%x == 0,Alice取1,N变成2,轮到Bob,Bob选1,N变成1,轮到Alice再选,没有符合的数,Alice输。
N=4
,0 < x < 4且4%x == 0,Alice取1,N变成3,轮到Bob,Bob选1,N变成2,轮到Alice再选1,N变成1,再轮到Bob选,没有符合的数,Alice赢。
N=5
,0 < x < 5且5%x == 0,Alice取1,N变成4,轮到Bob,Bob选1,N变成3,再轮到Alice选,和前面N等于3结果同样,Alice输。
N=6
,0 < x < 6且6%x == 0,Alice取1,N变成5,轮到Bob,Bob选1,N变成4,再轮到Alice选,和前面N等于4结果同样,Alice赢。
从上面依次计算的例子来看,当N为奇数的时候,谁先开始,谁就输,由于对方确定会让你继续变成奇数,直到N变成1。
当N为偶数的时候,谁先开始,谁就赢,第一步取1,将N变成奇数,对方只能继续取1或者其余奇数,奇数减去奇数变为偶数,开始的那一方再取1,直到N变成1。
public boolean divisorGame(int N) { return N%2 == 0; }
算法专题目前已连续日更超过七个月,算法题文章250+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是所有内容,若是你们有什么好的解法思路、建议或者其余问题,能够下方留言交流,点赞、留言、转发就是对我最大的回报和支持!