LeetCode292-Nim游戏(智力题)
Posted 朋友圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode292-Nim游戏(智力题)相关的知识,希望对你有一定的参考价值。
这种轮流拿掉[N,M]个石头的问题,是时候总结下公式了!
主要的核心就是,将问题转换为对方先手,然后你后手,使得每一轮,都保证是一个固定的数字。
比如这个【1,3】个石头,很明显就是凑4,对面拿1个,你拿3个;对面拿2,你拿2;对面3,你1。那么这一轮,永远是4个,主动权永远在你手里。
但是这个题目是你先手,那就把先手排除在外。 获胜的结果是,你是拿走最后一个石头的人,这里不要搞混,拿走最后3块,也算拿走最后一块了,以为在这三块里面。
那要怎样才能获胜? 最后一轮你也可以凑4即可。 对面拿1个,你拿3个;对面拿2,你拿2;对面3,你1。
那么总的石头个数就是,中间n个4,末尾一个4,加上先手是1~3个。
【先手】【他,你】【他,你】【他。你】【他,你】
这不就是4n+1~4n+3吗?
所以只要num%4!=0 即可。。。。
一开始想了很复杂!
关键就是凑4,和想到最后的获胜条件。
class Solution { public boolean canWinNim(int n) { if(n<=0) return false; if(n%4!=0) return true; else return false; } }
以上是关于LeetCode292-Nim游戏(智力题)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 292. Nim 游戏(博弈) / 650. 只有两个键的键盘 / 673. 最长递增子序列的个数(LIS二分+前缀和) / 58. 最后一个单词的长度
Leetcode刷题100天—292. Nim 游戏( 数学)—day42