• LeetCode 794. Valid Tic-Tac-Toe State


    原题链接在这里:https://leetcode.com/problems/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"}.

    题解:

    X player goes first. turn++.

    O player goes next. turn--.

    When checking the board, check row, col and diagonal, to see if there is n or -n. If yes, then x wins with n, o wins with -n.

    When x wins turn must be 1. When o wins turn must be 0. If not, return false.

    Check if turn is within 0 and 1.

    Time Complexity: O(n ^ 2). n = board.length.

    Space: O(n).

    AC Java:

     1 class Solution {
     2     public boolean validTicTacToe(String[] board) {
     3         int n = board.length;
     4         int turn = 0;
     5         boolean xWin = false;
     6         boolean oWin = false;
     7         int [] row = new int[n];
     8         int [] col = new int[n];
     9         int d = 0;
    10         int antiD = 0;
    11         
    12         for(int i = 0; i < n; i++){
    13             for(int j = 0; j < n; j++){
    14                 if(board[i].charAt(j) == 'X'){
    15                     turn++;
    16                     row[i]++;
    17                     col[j]++;
    18                     if(i == j){
    19                         d++;
    20                     }
    21                     
    22                     if(i + j == 2){
    23                         antiD++;
    24                     }
    25                 }else if(board[i].charAt(j) == 'O'){
    26                     turn--;
    27                     row[i]--;
    28                     col[j]--;
    29                     if(i == j){
    30                         d--;
    31                     }
    32                     
    33                     if(i + j == 2){
    34                         antiD--;
    35                     }
    36                 }
    37             }
    38         }
    39         
    40         for(int i = 0; i < n; i++){
    41             xWin |= row[i] == n;
    42             xWin |= col[i] == n;
    43             
    44             oWin |= row[i] == -n;
    45             oWin |= col[i] == -n;
    46         }
    47         
    48         xWin = xWin || d == n || antiD == n;
    49         oWin = oWin || d == -n || antiD == -n;
    50         
    51         if((xWin && turn != 1) || (oWin && turn != 0)){
    52             return false;
    53         }
    54         
    55         return turn == 0 || turn == 1;
    56     }
    57 }

    类似Design Tic-Tac-Toe.

  • 相关阅读:
    HDU:2767-Proving Equivalences(添边形成连通图)
    POJ:1330-Nearest Common Ancestors(LCA在线、离线、优化算法)
    HDU:1269-迷宫城堡(tarjan模板)
    Xml 丶json丶 C/S KVO 数据库 SQL 数据持久化 复杂对象 集合视图综合
    项目穿越记
    SDP (Session Description Protocol)
    shell脚本实现查找文件夹下重复的文件,并提供删除功能
    HDU 2896 病毒侵袭 (AC自动机)
    项目启动那些事儿
    C++ 完美破解九宫格(数独)游戏
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12105591.html
Copyright © 2020-2023  润新知