Google算法题:翻转游戏

来源:互联网 发布:灯杆数据基础调研 编辑:程序博客网 时间:2024/05/22 17:54

九章算法:Link


你和你的朋友正在玩一个翻转游戏:给定一个只包含'+'和'-'的字符串,你和你的朋友轮流进行以下操作:翻转两个连续的'+',使得”++”变成”—”。无法进行操作的一方为输。那么给出一个字符串,假设你先进行操作,你是否一定会赢呢?

Example:

s = "-++++-"
返回true,表示你一定会赢。只需翻转第二个和第三个加号使得
s = "-+--+-"
此时对方无法继续操作(没有两个连续的加号)。


class Sollution{//searchpublic boolean canWin(String str){int n = str.length();boolean[] ops = new boolean[n];for(int i=0; i<n; i++){ops[i] = (str.charAt(i)=='+');}return search(ops);}boolean search(boolean ops[]){for(int i=0; i<ops.length-1; i++){if(ops[i]&&ops[i+1]){ops[i]=false;ops[i+1]=false;//如果他的下一个人没有选的了,则先手就赢了if(!search(ops))return true;ops[i]=true;ops[i+1]=true;}}return false;}//nim 博弈//TODO}


原创粉丝点击