列表

详情


293. 翻转游戏

你和朋友玩一个叫做「翻转游戏」的游戏。游戏规则如下:

给你一个字符串 currentState ,其中只含 '+''-' 。你和朋友轮流将 连续 的两个 "++" 反转成 "--" 。当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。

计算并返回 一次有效操作 后,字符串 currentState 所有的可能状态,返回结果可以按 任意顺序 排列。如果不存在可能的有效操作,请返回一个空列表 []

 

示例 1:

输入:currentState = "++++"
输出:["--++","+--+","++--"]

示例 2:

输入:currentState = "+"
输出:[]

 

提示:

相似题目

翻转游戏 II

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<string> generatePossibleNextMoves(string currentState) { } };

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;
	}
}

上一题