Problem
你和朋友在玩一个游戏,桌上有一堆石头,你俩每次轮流拿走1到3个石头,拿走最后剩余石头的就是赢家。你先开始拿。
你俩都很聪明,会选最佳策略。写一个方法,初始有多少个石头,你会赢。
Example
输入:4
输出:false
解释:不管你拿1,2,3个石头,剩下3,2,1个石头都会被朋友一次性拿光,所以输。
Solution
由例子可知,只剩4个的时候拿的人必输。
剩5个,你拿1个,朋友必输。
剩6个,你拿2个,朋友必输。
剩7个,你拿三个,朋友必输。
剩8个,不管拿几个,朋友都能让剩下的石头到达4个,你必输
所以规律就是,石头个数为4的倍数的时候你去拿必输,所以不是4的倍数才能赢
class Solution {
public boolean canWinNim(int n) {
return n % 4 != 0;
}
}