题目
翻转游戏Ⅰ
翻转游戏Ⅱ
思路与算法
- 翻转游戏Ⅰ的意思读题容易歧义,读英文题目后理解是第一次操作后的所有list集合,因此思路很清晰,遍历,找到‘++’,改为‘–’后放入res结果集,之后再改回‘++’,直至遍历结束为止。
- 翻转游戏Ⅱ使用递归即可,利用不能双赢来写递归即可。
代码实现
翻转游戏Ⅰ
class Solution {
public List<String> generatePossibleNextMoves(String s) {
char[] ch = s.toCharArray();
List<String> res = new ArrayList<String>();
// 每次替换‘++’ 为‘--’ 后将此字符串传入res存放,传入后再恢复‘--’为‘++’
for (int i = 0; i < ch.length - 1; i++) {
if (ch[i] == '+' && ch[i + 1] == '+') {
ch[i] = '-';
ch[i + 1] = '-';
res.add(new String(ch));
ch[i] = '+';
ch[i + 1] = '+';
}
}
return res;
}
}
翻转游戏Ⅱ
class Solution {
public boolean canWin(String s) {
for (int i = 0; i < s.length(); ++i) {
if (i + 1 < s.length() && s.charAt(i) == '+' && s.charAt(i + 1) == '+') {
StringBuilder s1 = new StringBuilder(s);
StringBuilder tmp = s1;
tmp.setCharAt(i, '-');
tmp.setCharAt(i + 1, '-');
String tmp1 = tmp + "";
if (!canWin(tmp1)) {
return true;
}
}
}
return false;
}
}