【力扣每日一题】力扣292Nim游戏

题目来源

力扣292Nim游戏

题目概述

你和你的朋友,两个人一起玩 Nim 游戏:

桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。

解题思路

当我拿 1 的情况下:

  1. 朋友拿 1 ,总和为 2;
  2. 朋友拿 2 ,总和为 3;
  3. 朋友拿 3 ,总和为 4。

当我拿2的情况下:

  1. 朋友拿 1 ,总和为 3;
  2. 朋友拿 2 ,总和为 4;
  3. 朋友拿 3 ,总和为 5。

当我拿3的情况下:

  1. 朋友拿 1 ,总和为 4;
  2. 朋友拿 2 ,总和为 5;
  3. 朋友拿 3 ,总和为 6。

可以发现,朋友每次都能把我们所拿之和形成4,所以只要石头总数为4的倍数,他一定能赢。反之我一定能赢。

代码实现

java实现

class Solution {
    public boolean canWinNim(int n) {
        return n % 4 != 0;
    }
}

c++实现

class Solution {
public:
    bool canWinNim(int n) {
        return n % 4 != 0;
    }
};

你可能感兴趣的:(leetcode,算法,java,c++)