LeetCode 292. Nim Game Nim游戏(Java)

题目:

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

Example:
Input: 4
Output: false
Explanation: If there are 4 stones in the heap, then you will never win the game;
No matter 1, 2, or 3 stones you remove, the last stone will always be
removed by your friend.

解答:

一开始以为是一道动态规划的题,需要用到递归的思路。后来求解失败后,看了他人的解答,才发现这道题实则一道脑筋急转弯,即找规律的题

假设有 n 块石头,当 n=1 || n=2 || n=3 时,都可以赢得比赛。
当 n=4 时,无论怎样都是朋友赢得比赛
当 n=5 时,只有当你第一次拿1块时,无论朋友拿多少块,下一次都是你赢。(自己和朋友都有一定的游戏策略,比如 n=5 时,第一个取的人不会傻到取2或3块石头,这样就能让对方直接取走剩余的石头赢得比赛)
当 n=6 时,只有当你第一次拿2块时,朋友无论拿1-3块中的多少块,下次拿都是你赢
当 n=7 时,只有当你第一次拿3块时,朋友无论拿1-3块中的多少块,下次拿都是你赢
当 n=4 时,无论怎样都是朋友赢得比赛
以此类推,就会发现,当 n 为4的倍数时,无论怎样你都无法赢得比赛,其他情况下在正确的策略下你总能赢得比赛

class Solution {
    public boolean canWinNim(int n) {
        return n%4!=0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值