Google算法题:翻转游戏

1 篇文章 0 订阅
1 篇文章 0 订阅

九章算法:Link


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

Example:

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


class Sollution{
	//search
	public 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
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值