# LeetCode – Flip Game II (Java)

You are playing the following Flip Game with your friend: Given a string that contains only these two characters: + and -, you and your friend take turns to flip two consecutive "++" into "--". The game ends when a person can no longer make a move and therefore the other person will be the winner.

Write a function to determine if the starting player can guarantee a win.

For example, given s = "++++", return true. The starting player can guarantee a win by flipping the middle "++" to become "+--+".

Java Solution

This problem is solved by backtracking.

```public boolean canWin(String s) { if(s==null||s.length()==0){ return false; }   return canWinHelper(s.toCharArray()); }   public boolean canWinHelper(char[] arr){ for(int i=0; i<arr.length-1;i++){ if(arr[i]=='+'&&arr[i+1]=='+'){ arr[i]='-'; arr[i+1]='-';   boolean win = canWinHelper(arr);   arr[i]='+'; arr[i+1]='+';   //if there is a flip which makes the other player lose, the first play wins if(!win){ return true; } } }   return false; }```

Time Complexity

Roughly, the time is n*n*...n, which is O(n^n). The reason is each recursion takes O(n) and there are totally n recursions.

Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```