LeetCode - 794 - 有效的井字游戏 - java

x33g5p2x  于2021-12-10 转载在 Java  
字(2.6k)|赞(0)|评价(0)|浏览(285)

题目要求 和 大意

代码

正常代码风格

class Solution {
    public boolean validTicTacToe(String[] board) {
        int x = 0,o = 0;// o 和 x 的棋子数
        boolean playerx=false,playero=false;// 玩家x 和 玩家o

        // 棋子数量
        for(String s:board){
            for(int i =0;i<3;i++){
                char ch = s.charAt(i);
                if(ch == 'X'){
                    x++;
                }else if(ch == 'O'){
                    o++;
                }
            }
        }

        if(o==1 && x==0){
            return false;
        }
        if(x-1>o || o>x){
            return false;
        }

        // 斜线
        if(board[0].charAt(0) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(2)){
            if(board[0].charAt(0) == 'X'){
                playerx = true;
            }else if(board[0].charAt(0) == 'O'){
                playero = true;
            }
        }

        if(board[0].charAt(2) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(0)){
            if(board[0].charAt(2) == 'X'){
                playerx = true;
            }else if(board[0].charAt(2) == 'O'){
                playero = true;
            }
        }

        // 横着
        for(String s: board){
            boolean flag = true;
             char c1 = s.charAt(0);
            for(int i=1;i<3;i++){
               char c2 = s.charAt(i);
               if(c1!=c2){
                   flag=false;
                   break;
               }
            }
            if(c1 == 'X'&& flag){
                playerx = true;
            }
            else if(c1 == 'O'&& flag){
                playero = true;
            }
        }

        // 竖着
        for(int i =0;i<3;i++){
            boolean flag = true;
            char c1 = board[0].charAt(i);
            for(int j = 1; j < 3;j++){
                String s = board[j];
                if(s.charAt(i) != c1){
                    flag = false;
                    break;
                }
            }
            if( c1 == 'X'&& flag){
                playerx =true;
            }else if(c1 == 'O'&&flag){
                playero = true;
            }
        }

        // 判断 玩家是否这很的胜利
        if(playerx){
            if(x<=o){// playerx 先下,如果胜出,棋子数量比 player0 多
                return false;
            }
        }
        if(playero){
            if(x!=o){// player0 后下,如果胜出,棋子数量跟 playerx 一样多
                return false;
            }
        }
        return (playero && playerx)?false:true;
        }

    
}

简约风格(就是能省的符号,就省。能成一行的代码就写成一行)

class Solution {
    public boolean validTicTacToe(String[] board) {
        int x = 0,o = 0;// o 和 x 的棋子数
        boolean playerx=false,playero=false;// 玩家x 和 玩家o

        // 棋子数量
        for(String s:board){
            for(int i =0;i<3;i++){
                char ch = s.charAt(i);
                if(ch == 'X') x++;
                else if(ch == 'O') o++;
            }
        }

        if(o==1 && x==0)return false;
        if(x-1>o || o>x)return false;

        // 斜线
        if(board[0].charAt(0) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(2)){
            if(board[0].charAt(0) == 'X')playerx = true;
            else if(board[0].charAt(0) == 'O')playero = true;
        }

        if(board[0].charAt(2) == board[1].charAt(1) && board[1].charAt(1) == board[2].charAt(0)){
            if(board[0].charAt(2) == 'X')playerx = true;
            else if(board[0].charAt(2) == 'O')playero = true;
        }

        // 横着
        for(String s: board){
            boolean flag = true;
             char c1 = s.charAt(0);
            for(int i=1;i<3;i++){
               char c2 = s.charAt(i);
               if(c1!=c2){
                   flag=false;
                   break;
               }
            }
            if(c1 == 'X'&& flag)playerx = true;
            else if(c1 == 'O'&& flag)playero = true;
        }

        // 竖着
        for(int i =0;i<3;i++){
            boolean flag = true;
            char c1 = board[0].charAt(i);
            for(int j = 1; j < 3;j++){
                String s = board[j];
                if(s.charAt(i) != c1){
                    flag = false;
                    break;
                }
            }
            if( c1 == 'X'&& flag)playerx =true;
            else if(c1 == 'O'&&flag)playero = true;
        }

        // 判断 玩家是否这很的胜利
        if(playerx)
            if(x<=o)return false;// playerx 先下,如果胜出,棋子数量比 player0 多
        if(playero)
            if(x!=o)return false;// player0 后下,如果胜出,棋子数量跟 playerx 一样多

        return (playero && playerx)?false:true;
        }
}

正常风格代码的 讲解

相关文章