其他分享
首页 > 其他分享> > 动态规划一-博弈类

动态规划一-博弈类

作者:互联网

292. Nim Game

You are playing the following Nim Game with your friend:

Given n, the number of stones in the heap, return true if you can win the game assuming both you and your friend play optimally, otherwise return false

Example 1:

Input: n = 4
Output: false
Explanation: These are the possible outcomes:
1. You remove 1 stone. Your friend removes 3 stones, including the last stone. Your friend wins.
2. You remove 2 stones. Your friend removes 2 stones, including the last stone. Your friend wins.
3. You remove 3 stones. Your friend removes the last stone. Your friend wins.
In all outcomes, your friend wins.

Example 2:

Input: n = 1
Output: true

Example 3:

Input: n = 2
Output: true

Constraints:

class Solution {
    public boolean canWinNim(int n) {
        Boolean[] status = new Boolean[n+1];
        return helper(n,status);
    }
    private boolean helper(int n,Boolean[] status){
        if(n<=0) return false;//如果没有剩余的石头了,那么我就输了
        if(status[n]!=null) return status[n];
        for(int i=1;i<4;i++){//我可以取1,2,3个石头
            if(!helper(n-i,status)) return true; //如果我拿i个,剩下的如果对手能赢(true),那我就输了,对手输了(false) 我就能赢
        }
        return status[n]=false;
    }
}

 

标签:stones,stone,博弈,removes,your,动态,规划,Your,friend
来源: https://www.cnblogs.com/cynrjy/p/15670672.html