LeetCode------Nim Game

本文介绍了如何通过算法确定Nim游戏中玩家是否能赢得比赛的方法。给出了一种简单有效的解决方案,并对比了不同解法间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目介绍


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.

For example, 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.


自己的解法


[java]
  1. public class Solution {
        public boolean canWinNim(int n) {
            if(n <= 3){
                return true;
            }
            else{
                int f=n%4;
                if(f <= 3 && f > 0)
                return true;
                else
                return false;
            }
        }
    } 

其实题目中给的信息已经足够多了,而且它还提示了我们4这个数字。根据它的规则最大取三个数,而且是你先取。4块石头是最小的不满足数字,这时我们可以先举几个较小的数字找寻一下规律,当n为5时,可以。当n为6时,可以。当n为7时,可以。当n为8时,不可以。对前面几个数字小小的总结,我们就会发现一个简单的规律,当n对4取余时,如果余数不为0就可以,为0就不可以。这样可以给我们一个思路对于Nim Game这道题目,先找最小的不可能数,然后举几个例子寻找规律。不过具体的情况还是要具体考虑。


Hot解法

[java]
  1. publicboolean canWinNim(int n) { return n % 4 != 0 ;}

当我自己通过了之后,很好奇Hot解法会是怎么样的,果然没有让我失望,短短的一行代码,真是让我自行惭愧。= =
能简单时,净量要简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值