class Solution {
public:
vector<string> generatePossibleNextMoves(string currentState) {
}
};
293. 翻转游戏
你和朋友玩一个叫做「翻转游戏」的游戏。游戏规则如下:
给你一个字符串 currentState
,其中只含 '+'
和 '-'
。你和朋友轮流将 连续 的两个 "++"
反转成 "--"
。当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。
计算并返回 一次有效操作 后,字符串 currentState
所有的可能状态,返回结果可以按 任意顺序 排列。如果不存在可能的有效操作,请返回一个空列表 []
。
示例 1:
输入:currentState = "++++" 输出:["--++","+--+","++--"]
示例 2:
输入:currentState = "+" 输出:[]
提示:
1 <= currentState.length <= 500
currentState[i]
不是 '+'
就是 '-'
相似题目
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 3 MB, 提交时间: 2023-10-15 18:36:08
func generatePossibleNextMoves(s string) []string { out := []string{} for i := 0; i < len(s)-1; i++ { if '+' == s[i] && '+' == s[i+1] { bs := []byte(s) bs[i], bs[i+1] = '-', '-' out = append(out, string(bs)) } } return out }
python3 解法, 执行用时: 44 ms, 内存消耗: 16.3 MB, 提交时间: 2023-10-15 18:35:41
class Solution: def generatePossibleNextMoves(self, s: str) -> List[str]: ans=[] for i in range(len(s)-1): if s[i]==s[i+1]=='+': ans.append(s[:i]+'--'+s[i+2:]) return ans
java 解法, 执行用时: 0 ms, 内存消耗: 40.7 MB, 提交时间: 2023-10-15 18:35:18
class Solution { public List<String> generatePossibleNextMoves(String currentState) { List<String> ans = new LinkedList(); for(int i=0;i<currentState.length()-1;i++){ if(currentState.charAt(i)=='+' && currentState.charAt(i+1)=='+'){ StringBuilder builder = new StringBuilder(); builder.append(currentState.substring(0,i)); builder.append("--"); builder.append(currentState.substring(i+2,currentState.length())); ans.add(builder.toString()); } } return ans; } public List<String> generatePossibleNextMoves2(String currentState) { List<String> result = new ArrayList<>(); if (currentState == null || currentState.length() < 2) { return result; } char[] chars = currentState.toCharArray(); for (int i = 0; i < chars.length - 1; i++) { if (chars[i] == '+' && chars[i] == chars[i + 1]) { chars[i] = '-'; chars[i + 1] = '-'; result.add(new String(chars)); chars[i] = '+'; chars[i + 1] = '+'; } } return result; } }