LeetCode 794 有效的井字游戏

给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true

井字游戏的棋盘是一个 3 x 3 数组,由字符 ' ''X''O' 组成。字符 ' ' 代表一个空位。

以下是井字游戏的规则:

  • 玩家轮流将字符放入空位(' ')中。
  • 玩家 1 总是放字符 'X' ,而玩家 2 总是放字符 'O'
  • 'X''O' 只允许放置在空位中,不允许对已放有字符的位置进行填充。
  • 当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。
  • 当所有位置非空时,也算为游戏结束。
  • 如果游戏结束,玩家不允许再放置字符。

示例 1:

输入:board = ["O  ","   ","   "]
输出:false
解释:玩家 1 总是放字符 "X" 。

示例 2:

输入:board = ["XOX"," X ","   "]
输出:false
解释:玩家应该轮流放字符。

示例 3:

输入:board = ["XXX","   ","OOO"]
输出:false

Example 4:

输入:board = ["XOX","O O","XOX"]
输出:true

提示:

  • board.length == 3
  • board[i].length == 3
  • board[i][j]'X''O'' '
Related Topics
  • 数组
  • 字符串
  • public static boolean validTicTacToe(String[] board) {
        if (board == null || board.length == 0) return false;
    
        //分别表示'X'和'O' 出现的次数
        int xCount = 0, oCount = 0;
        for (String row : board) {
            for (char c : row.toCharArray()) {
                xCount = (c == 'X') ? xCount + 1 : xCount;
                oCount = (c == 'O') ? oCount + 1 : oCount;
            }
        }
    
        if (xCount != oCount && oCount != xCount - 1) {
            return false;
        }
    
        if (isWin(board, 'X') && oCount != xCount - 1) {
            return false;
        }
        if (isWin(board, 'O') && oCount != xCount) {
            return false;
        }
        return true;
    }
    
    private static boolean isWin(String[] board, char p) {
        for (int i = 0; i < 3; i++) {
            if (board[0].charAt(i) == p && board[1].charAt(i) == p && board[2].charAt(i) == p) {
                return true;
            }
            if (board[i].charAt(0) == p && board[i].charAt(1) == p && board[i].charAt(2) == p) {
                return true;
            }
        }
    
        if (board[0].charAt(0) == p && board[1].charAt(1) == p && board[2].charAt(2) == p) {
            return true;
        }
        if (board[2].charAt(0) == p && board[1].charAt(1) == p && board[0].charAt(2) == p) {
            return true;
        }
        return false;
    }
    
    public static void main(String[] args) {
        String[] board = new String[]{"O  ", "   ", "   "};
        boolean ans = ValidTicTacToe.validTicTacToe(board);
        System.out.println("ValidTicTacToe demo01 result : " + ans);
    
        board = new String[]{"XOX", " X ", "   "};
        ans = ValidTicTacToe.validTicTacToe(board);
        System.out.println("ValidTicTacToe demo02 result : " + ans);
    
        board = new String[]{"XXX", "   ", "OOO"};
        ans = ValidTicTacToe.validTicTacToe(board);
        System.out.println("ValidTicTacToe demo03 result : " + ans);
    
        board = new String[]{"XOX", "O O", "XOX"};
        ans = ValidTicTacToe.validTicTacToe(board);
        System.out.println("ValidTicTacToe demo04 result : " + ans);
    }
    
    ValidTicTacToe demo01 result : false
    ValidTicTacToe demo02 result : false
    ValidTicTacToe demo03 result : false
    ValidTicTacToe demo04 result : true
    
    原文地址:https://www.cnblogs.com/fyusac/p/15668261.html