• 794. Valid Tic-Tac-Toe State


    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to reach this board position during the course of a valid tic-tac-toe game.

    The board is a 3 x 3 array, and consists of characters " ""X", and "O".  The " " character represents an empty square.

    Here are the rules of Tic-Tac-Toe:

    • Players take turns placing characters into empty squares (" ").
    • The first player always places "X" characters, while the second player always places "O" characters.
    • "X" and "O" characters are always placed into empty squares, never filled ones.
    • The game ends when there are 3 of the same (non-empty) character filling any row, column, or diagonal.
    • The game also ends if all squares are non-empty.
    • No more moves can be played if the game is over.
    Example 1:
    Input: board = ["O  ", "   ", "   "]
    Output: false
    Explanation: The first player always plays "X".
    
    Example 2:
    Input: board = ["XOX", " X ", "   "]
    Output: false
    Explanation: Players take turns making moves.
    
    Example 3:
    Input: board = ["XXX", "   ", "OOO"]
    Output: false
    
    Example 4:
    Input: board = ["XOX", "O O", "XOX"]
    Output: true

    Note:

    • board is a length-3 array of strings, where each string board[i] has length 3.
    • Each board[i][j] is a character in the set {" ", "X", "O"}.

    Approach  #1: Simulate. [Java]

    class Solution {
        public boolean validTicTacToe(String[] board) {
            int numX = 0;
            int numO = 0;
            for (String str : board) {
                for (int i = 0; i < str.length(); ++i) {
                    if (str.charAt(i) == 'X') numX++;
                    else if (str.charAt(i) == 'O') numO++;
                }
            }
            if (numO > numX) return false;   // ["O  ", "   ", "   "]
            if (numX > numO+1) return false; // ["XOX", " X ", "   "]
            if (gameOver(board, 'X') && numX == numO) return false; // ["XXX", "   ", "OOO"]
            if (gameOver(board, 'O') && numX > numO) return false;  // ["OXX","XOX","OXO"]
            
            return true;
        }
        
        private boolean gameOver(String[] board, char c) {
            char[][] charArr = new char[3][3];
            for (int i = 0; i < 3; ++i) {
                for (int j = 0; j < 3; ++j) {
                    charArr[i][j] = board[i].charAt(j);
                }
            }
            // top
            if (charArr[0][1] == c && charArr[0][0] == c && charArr[0][2] == c) 
                return true;
            
            // bottom
            if (charArr[1][1] == c && charArr[1][0] == c && charArr[1][2] == c)
                return true;
            
            // left
            if (charArr[1][0] == c && charArr[0][0] == c && charArr[2][0] == c)
                return true;
            
            // right
            if (charArr[1][2] == c && charArr[0][2] == c && charArr[2][2] == c)
                return true;
            
            // center
            if (charArr[1][1] == c && charArr[0][1] == c && charArr[2][1] == c) 
                return true;
            if (charArr[1][1] == c && charArr[1][0] == c && charArr[1][2] == c)
                return true;
            if (charArr[1][1] == c && charArr[0][2] == c && charArr[2][0] == c)
                return true;
            if (charArr[1][1] == c && charArr[0][0] == c && charArr[2][2] == c)
                return true;
            
            return false;
        }
    }
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    python动态规划解决矩阵连乘
    ISCC2019-digdigdig
    MultiSelectComboBox(一)
    中国地图 xaml Canvas
    NotificationObject.cs
    DelegateCommand.cs
    SQL-PIVOT 数据透视 行列转换
    中国行政区域(省,市,县)SQL
    WCF自定义地址路由映射(不用svc文件)
    java下载安装,环境变量,hello world
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10882681.html
Copyright © 2020-2023  润新知