294. Flip Game II

     /*
      * 294. Flip Game II
      * 2016-7-2 by Mingyang
      * 这个题目我开始做的时候,还加了turn=1、-1来表示是哪个人走,还用了一个函数来表示什么时候不能走
      * 其实都不用,这里如果没有可以走的了dfs的末尾会自动return false,另外,本轮是我走,我只要保证
      * 下一轮return false就行了,我就return true,就是我走了以后,你下一轮无论怎么走,都不行
      * 再次注意:题目的要求是determine if the starting player can guarantee a win!!!!
      * 不是能不能赢,是能不能保证必须赢!!!!这就是我刚开始搞错的地方
      * 这里和其他传统的backtracking一点点不一样,没有刚开始的条件判断,因为只要走过一遍没发的都return false
      */
     
     public boolean canWin(String s) {
            int n = s.length();
            if(n<=1) return false;
            return dfs(s);
        }
        private boolean dfs(String s){
            StringBuffer buffer = new StringBuffer(s);
            for(int i=0;i<s.length()-1;i++){
                if(s.charAt(i)==s.charAt(i+1)&&s.charAt(i+1)=='+'){
                    buffer.setCharAt(i,'-');
                    buffer.setCharAt(i+1,'-');
                    if(!dfs(buffer.toString())) 
                        return true;
                    buffer.setCharAt(i,'+');
                    buffer.setCharAt(i+1,'+');
                }
            }
            return false;
        }

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-30
  • 2021-04-11
  • 2022-03-05
  • 2021-07-31
  • 2021-06-30
猜你喜欢
  • 2022-03-02
  • 2021-12-29
  • 2021-11-13
  • 2021-11-17
  • 2021-09-11
  • 2022-12-23
相关资源
相似解决方案