文章目录
- 1. 题目
- 2. 解题
1. 题目
你和朋友玩一个叫做「翻转游戏」的游戏,
游戏规则:给定一个只有 + 和 - 的字符串。
你和朋友轮流将 连续 的两个 "++"
反转成 "--"
。
当一方无法进行有效的翻转时便意味着游戏结束,则另一方获胜。
请你写出一个函数来判定起始玩家是否存在必胜的方案。
示例:
输入: s = "++++"
输出: true
解析: 起始玩家可将中间的 "++" 翻转变为 "+--+" 从而得胜。
延伸:
请推导你算法的时间复杂度。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/flip-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {unordered_map<string,bool> m;
public:bool canWin(string s) {if(s.size() <= 1) return false;if(m.count(s)) return m[s];string t;for(int i = 0; i < s.size()-1; ++i){if(s[i]=='+' && s[i+1]=='+'){t = s;t[i]=t[i+1]='-';if(!canWin(t)){m[s] = true;return true;}}}m[s] = false;return false;}
};
40 ms 11.8 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!