LeetCode 294. Flip Game II(反转游戏II)

本文探讨了LeetCode上Flip Game II的问题解决方法,通过MinMax算法及深度优先搜索策略,帮助玩家确定是否能确保赢得游戏。文章提供了详细的代码实现。

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

原题网址:https://leetcode.com/problems/flip-game-ii/

You are playing the following Flip Game with your friend: Given a string that contains only these two characters: + and -, you and your friend take turns to flip twoconsecutive "++" into "--". The game ends when a person can no longer make a move and therefore the other person will be the winner.

Write a function to determine if the starting player can guarantee a win.

For example, given s = "++++", return true. The starting player can guarantee a win by flipping the middle "++" to become "+--+".

Follow up:
Derive your algorithm's runtime complexity.

方法:MinMax算法,深度优先搜索

public class Solution {
    private boolean canWin(char[] sa) {
        for(int i=0; i<sa.length-1; i++) {
            if (sa[i]=='+' && sa[i+1]=='+') {
                sa[i]='-';
                sa[i+1]='-';
                boolean otherCanWin = canWin(sa);
                sa[i]='+';
                sa[i+1]='+';
                if (!otherCanWin) return true;
            }
        }
        return false;
    }
    public boolean canWin(String s) {
        return canWin(s.toCharArray());
    }
}

这道题有个很牛的算法,我没看懂。。。

参考:

https://leetcode.com/discuss/64344/theory-matters-from-backtracking-128ms-to-dp-0ms

http://www.1point3acres.com/bbs/thread-144510-1-1.html

http://www.1point3acres.com/bbs/thread-137953-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值