小白水平理解面试经典题目LeetCode 1025 Divisor Game【动态规划】

1025 除数游戏

小艾 和 小鲍 轮流玩游戏,小艾首先开始。
最初,黑板上有一个数字 n 。在每个玩家的回合中,该玩家做出的动作包括:

  • 选择任意 x,使 0 < x < n 和 n % x == 0 。
  • 将黑板上的数字 n 替换为 n - x 。
    此外,如果玩家无法采取行动,他们就会输掉比赛。

当且仅当 小艾赢得游戏时返回 true ,假设两个玩家都发挥最佳。

例子

在这里插入图片描述

在大学某个自习的下午,小白坐在教室看到这道题。想想现年景一过,没有什么理由再不学习了。真是若对黄花孤负酒,怕黄花,也笑人岑寂。

这时候黑长直女神过来问:小白,你看到1025这道题了吗,怎么感觉看着很简单,但是理解起来很麻烦啊,这道题你有什么思路呢?

小白内心镇定:这机会不就来了吗,小美,《一起摇太阳》有机会一起去看看吧?
在这里插入图片描述
哦,不是,题目描述意思说的简单一些。

这种题目我们首先把他进行下条件梳理,

从这个问题来看,小艾可以从 1 to N 中选择一个数字,并且她必须选择优化她的获胜。同样,小鲍也会努力为自己赢得胜利。

考虑如果数字是 2 ,小艾以 1 开头并且她赢了

对于 3 ,小艾选择 1 ,小鲍再次选择 1 ,小艾输了

咱们拿4举个例子

4 = 小艾 -> (4 - 1) - 剩下 3 给 小鲍
3 = 小鲍 -> (3 -1) - 剩下 2 给 小艾
2 = 小艾 -> (2 - 1) - 剩下 1 给 小鲍

现在鲍勃无法选择任何东西,他输了

像这样,如果我们尝试每个数字,我们将得到一个模式,如果我们知道 N 是奇数,那么 小艾输了,如果 N 是偶数小艾赢了。

解决这个问题的简单方法是返回 N % 2 == 0

小白:没问题,谁叫为了“真爱”呢。

真正面试环节

面试官:咱们今天来个轻松的,你可以解答这道”除数游戏“的题目吗,来看看你对简单题目的理解。

小白:嘿嘿,这不巧了么这不是。
在这里插入图片描述

public boolean divisorGame(int N) {
   
       return N % 2 == 0;
   }

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:矮油,不错啊,不过你是不是完成的太快了,这么一行就像糊弄我。是否还有其他办法呢。
在这里插入图片描述
小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。不是,谁让你这出题正好有简单方法呢!

public static boolean divisorGame(int N) {
   
        // dp数组,dp[i]表示N=i时,小艾是否能获胜
        boolean[] dp = new boolean[N + 1];

        for (int i = 2; i <= N; i++) {
   
            // 对于每个N,遍历所有可能的选择
            for (int x = 1; x < i; x++) {
   
                if (i % x == 0 && !dp[i - x]) {
   
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[N];
    }

小白:您好,面试官,这回可以了吧,我终于有钱请小美看电影了!
在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】
编码道路漫漫,只要先看脚下的路,徐徐前进即可。

最近更新

  1. TCP协议是安全的吗?

    2024-02-20 02:02:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-20 02:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-20 02:02:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-20 02:02:01       20 阅读

热门阅读

  1. linux查看磁盘占用命令

    2024-02-20 02:02:01       21 阅读
  2. 【LeetCode每日一题】单调栈 901股票价格跨度

    2024-02-20 02:02:01       33 阅读
  3. 【Docker】dockerfile学习

    2024-02-20 02:02:01       28 阅读
  4. 备战蓝桥杯 Day6(学习动态规划)

    2024-02-20 02:02:01       27 阅读
  5. Linux——常用特殊符号介绍

    2024-02-20 02:02:01       26 阅读
  6. 深度学习优化算法

    2024-02-20 02:02:01       25 阅读
  7. 开源数据库MYSQL DBA运维实战 第二章 SQL

    2024-02-20 02:02:01       22 阅读
  8. Unity中关于群组的一些组件

    2024-02-20 02:02:01       26 阅读
  9. 【力扣每日一题】力扣590N叉树的后序遍历

    2024-02-20 02:02:01       25 阅读
  10. Oracle大型数据库技术

    2024-02-20 02:02:01       22 阅读
  11. final域的内存语义

    2024-02-20 02:02:01       28 阅读