【Leetcode】292. Nim Game

来源:互联网 发布:淘宝下架时间显示插件 编辑:程序博客网 时间:2024/04/28 09:46

思路:

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

1 0