你和朋友玩一个叫做「翻转游戏」的游戏。游戏规则如下:
给你一个字符串 currentState ,其中只含 ‘+’ 和 ‘-’ 。你和朋友轮流将 连续 的两个 “++” 反转成 “–” 。当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。默认每个人都会采取最优策略。
请你写出一个函数来判定起始玩家 是否存在必胜的方案 :如果存在,返回 true ;否则,返回 false 。
示例 1:
输入:currentState = “++++”
输出:true
解释:起始玩家可将中间的 “++” 翻转变为 “±-+” 从而得胜。
示例 2:
输入:currentState = “+”
输出:false
提示:
1 <= currentState.length <= 60
currentState[i] 不是 ‘+’ 就是 ‘-’
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/flip-game-ii
方法一:回溯
C++提交内容:
class Solution {
public:
bool canWin(string currentState)
{ //回溯
string s = currentState;
int n = s.size();
for (int i = 0; i < n - 1; i ++)
{
if (s[i] == '+' && s[i+1] == '+')
{
s[i] = '-';
s[i+1] = '-';
if (canWin (s) == false)
return true;
s[i] = '+';
s[i+1] = '+';
}
}
return false;
}
};