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 小时前
递归时间复杂度演算T (n)=aT (n/b)+f (n)-东方仙盟
算法·仙盟创梦ide·东方仙盟
垆边人似月.1 小时前
华为机考题:明明的随机数
数据结构·算法·华为
Doubbbbbbble云2 小时前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙2 小时前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法
keyipatience2 小时前
B树详解:从零构建平衡多路搜索树
数据结构·b树·算法·图搜索
FluxArt3 小时前
GPT Image 2.5 多图参考怎么用:Flux Art 生成与编辑教程
数据结构·gpt·算法
All for pursuit.3 小时前
【分治-2】215.数组中的第K个最大元素
数据结构·c++·算法·leetcode
CQU_JIAKE3 小时前
9.15【A】
算法·动态规划
成为深度学习高手3 小时前
DAG:沿时间与通道双相关建模的外生变量时序预测
网络·人工智能·深度学习·算法·机器学习·数据挖掘·时序数据库