293. 翻转游戏 🔒
题目描述
你和朋友玩一个叫做「翻转游戏」的游戏。游戏规则如下:
给你一个字符串 currentState
,其中只含 '+'
和 '-'
。你和朋友轮流将 连续 的两个 "++"
反转成 "--"
。当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。
计算并返回 一次有效操作 后,字符串 currentState
所有的可能状态,返回结果可以按 任意顺序 排列。如果不存在可能的有效操作,请返回一个空列表 []
。
示例 1:
输入:currentState = "++++" 输出:["--++","+--+","++--"]
示例 2:
输入:currentState = "+" 输出:[]
提示:
1 <= currentState.length <= 500
currentState[i]
不是'+'
就是'-'
解法
方法一:遍历 + 模拟
我们遍历字符串,如果当前字符和下一个字符都是 +
,那么我们就将这两个字符变成 -
,然后将结果加入到结果数组中,再将这两个字符变回 +
。
遍历结束后,返回结果数组即可。
时间复杂度 $O(n^2)$,其中 $n$ 是字符串长度。忽略答案数组的空间复杂度,空间复杂度 $O(n)$ 或 $O(1)$。
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|