你和朋友玩一个叫做「翻转游戏」的游戏。游戏规则如下:
给你一个字符串 currentState
,其中只含 '+'
和 '-'
。你和朋友轮流将 连续 的两个 "++"
反转成 "--"
。当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。
计算并返回 一次有效操作 后,字符串 currentState
所有的可能状态,返回结果可以按 任意顺序 排列。如果不存在可能的有效操作,请返回一个空列表 []
。
示例 1:
输入:currentState = "++++" 输出:["--++","+--+","++--"]
示例 2:
输入:currentState = "+" 输出:[]
提示:
1 <= currentState.length <= 500
currentState[i]
不是'+'
就是'-'
思路:
没有思路,直接简单模拟
一开始想着用回溯,但是回溯要一直dfs到底才结算结果,这个dfs走两步就要出结果然后不能往下继续走,要重新开始下一次的dfs,这样的话太麻烦,该模拟的时候就得模拟,超级简单,有时候不能化简为繁,画蛇添足
代码:
class Solution {
public:
vector<string> generatePossibleNextMoves(string s) {
vector<string> ans;
int n = s.size();
for (int i = 0; i < n - 1; i++) {
if (s[i] == '+' && s[i + 1] == '+') {
s[i] = s[i + 1] = '-';
ans.push_back(s);
s[i] = s[i + 1] = '+';
}
}
return ans;
}
};