LeetCode:Nim Game

先上题目链接:Nim Game

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.

题目大意就是给你一堆石头,每次可以从中拿出1~3块,两个人轮流拿,拿到最后一块石头的人获胜。现在有 n 块石头,由你先拿,请快速判断你能否获胜。

f(n) 表示有 n 块石头时的获胜情况(必输/必赢),由于你拿了之后,接着是对方拿,所以得到公式:

f(n)=![f(n1)&&f(n2)&&f(n3)]

由于 f(1)=f(2)=f(3)=true ,结合公式可以发现这是一个长度为4的循环,得到这样一个关系:
f(n)={false,true,if n mod 4 is zeroother conditions

代码如下:

public class Solution {
    public boolean canWinNim(int n) {
        boolean result = false;
        if (n < 1) {
            return false;
        } 

        if ((n%4) != 0) {
            result = true;
        }

        return result;
    }
}



我的作业部落链接:Nim Game

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值