您的位置:首页 > 其它

【Leetcode】292. Nim Game

2017-02-18 10:04 381 查看
思路:

1个石子,先手全部拿走;2个石子,先手全部拿走;3个石子,先手全部拿走;4个石子,后手面对的是先手的第1,2,3情况,后手必胜;5个石子,先手拿走1个让后手面对第4种情况,后手必败;6个石子,先手拿走2个让后手面对第4种情况,后手必败;7个石子,先手拿走3个让后手面对第4种情况,后手必败。

当n∈[1,3]时,先手必胜。当n == 4时,无论先手第一轮如何选取,下一轮都会转化为n∈[1,3]的情形,此时先手必负。当n∈[5,7]时,先手必胜,先手分别通过取走[1,3]颗石头,可将状态转化为n == 4时的情形,此时后手必负。当n == 8时,无论先手第一轮如何选取,下一轮都会转化为n∈[5,7]的情形,此时先手必负。

容易看出来,只有当出现了4的倍数,先手无可奈何,其余情况先手都可以获胜。(石子数量为4的倍数)后手的获胜策略十分简单,每次取石子的数量,与上一次先手取石子的数量和为4即可;(石子数量不为4的倍数)先手的获胜策略也十分简单,每次都令取之后剩余的石子数量为4的倍数(4*0=0,直接拿光),他就处于后手的位置上,利用上一行的策略获胜

public class Solution {
public boolean canWinNim(int n) {
if (n % 4 == 0)
return false;
else
return true;
}
}


Runtime:1ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: