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) {
        return false;
   return canWinHelper(s.toCharArray()); 
public boolean canWinHelper(char[] arr){
    for(int i=0; i<arr.length-1;i++){
            boolean win = canWinHelper(arr);
            //if there is a flip which makes the other player lose, the first play wins
                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:
String foo = "bar";