• LeetCode.1025-除数游戏(Divisor Game)


    这是小川的第382次更新,第411篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第244题(顺位题号是1025)。Alice和Bob轮流玩游戏,Alice首先出发。

    最初,黑板上有一个数字N. 在每个玩家的回合中,该玩家进行以下操作:

    选择0 < x <NN%x == 0的任何x

    N - x替换黑板上的数字N.

    此外,如果玩家无法移动,他们将输掉游戏。

    当且仅当Alice赢得比赛时才返回True,假设两个玩家都达到最佳状态。

    例如:

    输入:2
    输出:true
    说明:Alice选择1,Bob没有更多动作。

    输入:3
    输出:false
    说明:Alice选择1,Bob选择1,Alice不再移动。

    注意

    • 1 <= N <= 1000

    02 解题

    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;
    }
    

    03 小结

    算法专题目前已连续日更超过七个月,算法题文章250+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    Disruptor详细介绍之快速入门
    Java魔法类:sun.misc.Unsafe
    Java开源框架推荐
    CAS(Compare and Swap)无锁算法之volatile不能保证原子性而Atomic可以
    数据库乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解
    Linux上查找线程使用的CPU时间最长
    虚拟机内存结构
    插入排序和归并排序(算法学习1)
    POJ-2942:吃糖果
    POJ-4004:数字组合(用位移方法解组合数问题,Java版)
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/11184277.html
Copyright © 2020-2023  润新知