• 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
  • 相关阅读:
    协议(五)-从电报机到智能手机
    协议(四)-通信发展史
    NDK历史版本
    android onKeyDown
    设计模式
    Android获取系统时间的多种方法
    USB 3.0规范中译本 第5章 机械结构
    ES6新特性
    08_SQLyog图形化工具介绍
    07_聚合函数,分组查询&limit关键字
  • 原文地址:https://www.cnblogs.com/fyusac/p/15668261.html
  • Copyright © 2020-2023  润新知