前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 1025. 除数博弈

Leetcode 1025. 除数博弈

作者头像
zhipingChen
发布2019-06-11 14:22:22
4850
发布2019-06-11 14:22:22
举报
文章被收录于专栏:编程理解编程理解

题目描述

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

最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:

  • 选出任一 x,满足 0 < x < N 且 N % x == 0 。
  • 用 N - x 替换黑板上的数字 N 。

如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。

示例 1:

输入:2

输出:true

解释:爱丽丝选择 1,鲍勃无法进行操作。

示例 2:

输入:3

输出:false

解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

最佳状态是指,数字若减去其任一除数因子对于对方为 false,则当前数字返回 true,否则当前数字返回 false。

解法

不妨以 f(x) 表示数字为 x 的返回值,则当 x=1 时,f(1) 为 false。

当 x=2,除数因子为 1,因为 f(1)=false,所以 f(2)=true 当 x=3,除数因子为 1,因为 f(2)=true,所以 f(3)=false 当 x=4,除数因子为 1,2,因为 f(3)=false,所以 f(4)=true ...

观察可知,对于前面几个数,若 x 为奇数,则 f(x)=false;若 x 为偶数,则 f(x)=true。

当 x>4,若 x 为奇数,则 x 的除数因子都是奇数,即 x 减去其除数因子皆为偶数,因为偶数的函数值为 true,则 f(x)=false; 当 x>4,若 x 为偶数,因为 x-1 为奇数,因为奇数的函数值为 false,则 f(x)=true;

由此可知,所有奇数的函数返回值为 false,偶数的函数返回值为true。

代码语言:javascript
复制
class Solution:
    def divisorGame(self, N: int) -> bool:
        return N%2==0
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档