LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game

1275. Find Winner on a Tic Tac Toe Game

Tic-tac-toe is played by two players A and B on a 3 x 3 grid. The rules of Tic-Tac-Toe are:

  • Players take turns placing characters into empty squares ' '.
  • The first player A always places 'X' characters, while the second player B always places 'O' characters.
  • 'X' and 'O' characters are always placed into empty squares, never on filled ones.
  • The game ends when there are three 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.

Given a 2D integer array moves where m o v e s i = r o w i , c o l i movesi = row_i, col_i movesi=rowi,coli indicates that the i t h i^{th} ith move will be played on g r i d r o w i c o l i gridrow_icol_i gridrowicoli. return the winner of the game if it exists (A or B). In case the game ends in a draw return "Draw". If there are still movements to play return "Pending".

You can assume that moves is valid (i.e., it follows the rules of Tic-Tac-Toe), the grid is initially empty, and A will play first.

Example 1:

Input: moves = \[0,0,2,0,1,1,2,1,2,2]

Output: "A"

Explanation: A wins, they always play first.

Example 2:

Input: moves = \[0,0,1,1,0,1,0,2,1,0,2,0]

Output: "B"

Explanation: TB wins.

Example 3:

Input: moves = \[0,0,1,1,2,0,1,0,1,2,2,1,0,1,0,2,2,2]

Output: "Draw"

Explanation: The game ends in a draw since there are no moves to make.

Constraints:
  • 1 <= moves.length <= 9
  • movesi.length == 2
  • 0 < = r o w i , c o l i < = 2 0 <= row_i, col_i <= 2 0<=rowi,coli<=2
  • There are no repeated elements on moves.
  • moves follow the rules of tic tac toe.

From: LeetCode

Link: 1275. Find Winner on a Tic Tac Toe Game


Solution:

Ideas:

put A as 1, B as -1.

If any row, column, or diagonal sums to 3, A wins.

If it sums to -3, B wins.

Code:
c 复制代码
char* tictactoe(int** moves, int movesSize, int* movesColSize) {
    int board[3][3] = {0}; // A = 1, B = -1

    for (int i = 0; i < movesSize; i++) {
        int r = moves[i][0];
        int c = moves[i][1];

        board[r][c] = (i % 2 == 0) ? 1 : -1;
    }

    for (int i = 0; i < 3; i++) {
        int row = board[i][0] + board[i][1] + board[i][2];
        int col = board[0][i] + board[1][i] + board[2][i];

        if (row == 3 || col == 3) return "A";
        if (row == -3 || col == -3) return "B";
    }

    int diag1 = board[0][0] + board[1][1] + board[2][2];
    int diag2 = board[0][2] + board[1][1] + board[2][0];

    if (diag1 == 3 || diag2 == 3) return "A";
    if (diag1 == -3 || diag2 == -3) return "B";

    if (movesSize == 9) return "Draw";
    return "Pending";
}
相关推荐
罗湖老棍子1 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环
文丑颜不良啊2 小时前
LeetCode201~225题目解析
java·leetcode
stsdddd4 小时前
YOLO算法建筑工地安全帽目标检测数据集16881张:标注核对笔记
算法·yolo·目标检测
CV爱数码4 小时前
论文精读|Learned Primal-Dual:把原始–对偶算法展开成网络
图像处理·算法·计算机视觉·ct·重建·断层扫描
yuniko-n5 小时前
【算法】约瑟夫环问题
java·算法
l1t5 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
Nil2085 小时前
LeetCode 283移动零
数据结构·算法·leetcode
CQU_JIAKE5 小时前
10.18【A】
算法
LMT流氓兔6 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
知识分享小能手6 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习