zoukankan      html  css  js  c++  java
  • 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;
            }
  • 相关阅读:
    UVA10763交换学生
    UVA10763交换学生
    UVA10391复合词
    UVA10391复合词
    UVA10125和集
    UVA10125和集
    POJ3762 时间段用k次
    POJ3762 时间段用k次
    Win64 驱动内核编程-11.回调监控进线程句柄操作
    Win64 驱动内核编程-11.回调监控进线程句柄操作
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5636484.html
Copyright © 2011-2022 走看看