2021-12-09 794. 有效的井字游戏

2021-12-09  本文已影响0人  16孙一凡通工

本来想用Go写个深度遍历,结果有些bug,所以换了java写了个模拟,参考了别人的评论,才知道需要判定胜负不同情况下的O与X的值。这个地方欠考虑了。

// X必须比O多1个或者相同,否则false; 2、X和O不能同时都是赢家,否则false; 3、X赢的时候必须比O多1个,否则false; 4、O赢得时候个数与X相同,否则false;

java版本

class Solution {
    public boolean validTicTacToe(String[] board) {

        int count_o=0,count_x=0;
        for(int i=0;i<3;i++){
            for(char c : board[i].toCharArray()){
            count_o= c=='O' ? count_o+1 : count_o;
            count_x= c=='X' ? count_x+1 : count_x;
            }
        }
        System.out.println(count_o);
          System.out.println(count_x);

     if (count_x!=count_o && count_o!=count_x-1){
         return false;
     }
      if(dfs(board,'X') && count_x!=count_o+1){
         return false;
     }
      if (dfs(board,'O') && count_x!=count_o){
         return false;
     }
    
     return true;
    //  

        
        //  X必须比O多1个或者相同,否则false; 2、X和O不能同时都是赢家,否则false; 3、X赢的时候必须比O多1个,否则false; 4、O赢得时候个数与X相同,否则false;

       
}
public boolean dfs(String[] board,char tmp){
    for(int i=0;i<board.length;i++) {
        // 直线情况
   if(board[i].charAt(0)==tmp && board[i].charAt(1)==tmp && board[i].charAt(2)==tmp ){
       return true;
   }
    if(board[0].charAt(i)==tmp && board[1].charAt(i)==tmp && board[2].charAt(i)==tmp ){
       return true;
   }
    }
     if(board[0].charAt(0)==tmp && board[1].charAt(1)==tmp && board[2].charAt(2)==tmp ){
       return true;
   }
    if(board[0].charAt(2)==tmp && board[1].charAt(1)==tmp && board[2].charAt(0)==tmp ){
       return true;
   }

return false;
}

}
上一篇 下一篇

猜你喜欢

热点阅读