Formatted question description: https://leetcode.ca/all/1275.html
1275. Find Winner on a Tic Tac Toe Game (Easy)
Tictactoe is played by two players A and B on a 3 x 3 grid.
Here are the rules of TicTacToe:
 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 3 of the same (nonempty) character filling any row, column, or diagonal.
 The game also ends if all squares are nonempty.
 No more moves can be played if the game is over.
Given an array moves
where each element is another array of size 2 corresponding to the row and column of the grid where they mark their respective character in the order in which A and B play.
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 (It follows the rules of TicTacToe), 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, he always plays first. "X " "X " "X " "X " "X " " " > " " > " X " > " X " > " X " " " "O " "O " "OO " "OOX"
Example 2:
Input: moves = [[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]] Output: "B" Explanation: "B" wins. "X " "X " "XX " "XXO" "XXO" "XXO" " " > " O " > " O " > " O " > "XO " > "XO " " " " " " " " " " " "O "
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. "XXO" "OOX" "XOX"
Example 4:
Input: moves = [[0,0],[1,1]] Output: "Pending" Explanation: The game has not finished yet. "X " " O " " "
Constraints:
1 <= moves.length <= 9
moves[i].length == 2
0 <= moves[i][j] <= 2
 There are no repeated elements on
moves
. moves
follow the rules of tic tac toe.
Related Topics:
Array
Solution 1.
// OJ: https://leetcode.com/problems/findwinneronatictactoegame/
// Time: O(1)
// Space: O(1)
class Solution {
string check(int A[3][3]) {
for (int i = 0; i < 3; ++i) {
int j = 1;
while (j < 3 && A[i][0] != 0 && A[i][j] == A[i][0]) ++j;
if (j == 3) return A[i][0] == 1 ? "A" : "B";
j = 1;
while (j < 3 && A[0][i] != 0 && A[j][i] == A[0][i]) ++j;
if (j == 3) return A[0][i] == 1 ? "A" : "B";
}
int i = 1;
while (i < 3 && A[0][0] != 0 && A[i][i] == A[0][0]) ++i;
if (i == 3) return A[0][0] == 1 ? "A" : "B";
i = 1;
while (i < 3 && A[0][2] != 0 && A[i][2  i] == A[0][2]) ++i;
if (i == 3) return A[0][2] == 1 ? "A" : "B";
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (A[i][j] == 0) return "Pending";
}
}
return "Draw";
}
public:
string tictactoe(vector<vector<int>>& moves) {
int A[3][3] = {}, ch = 1;
for (auto &m : moves) {
A[m[0]][m[1]] = ch;
ch = ch == 1 ? 2 : 1;
}
return check(A);
}
};
Solution 2.
// OJ: https://leetcode.com/problems/findwinneronatictactoegame/
// Time: O(1)
// Space: O(1)
class Solution {
public:
string tictactoe(vector<vector<int>>& moves) {
int A[8] = {}, B[8] = {};
for (int i = 0; i < moves.size(); ++i) {
int r = moves[i][0], c = moves[i][1];
if (i % 2 == 0 && (++A[r] == 3  ++A[3 + c] == 3  (r == c && ++A[6] == 3)  (r == 2  c && ++A[7] == 3))) return "A";
if (i % 2 && (++B[r] == 3  ++B[3 + c] == 3  (r == c && ++B[6] == 3)  (r == 2  c && ++B[7] == 3))) return "B";
}
return moves.size() == 9 ? "Draw" : "Pending";
}
};
Java

class Solution { public String tictactoe(int[][] moves) { final char[] SIGNALS = {'X', 'O'}; final int SIDE = 3; char[][] board = new char[SIDE][SIDE]; int[][] countRows = new int[2][SIDE]; int[][] countColumns = new int[2][SIDE]; int[][] countDiagonals = new int[2][2]; int length = moves.length; for (int i = 0; i < length; i++) { int player = i % 2; int[] move = moves[i]; int row = move[0], column = move[1]; board[row][column] = SIGNALS[player]; int countRow = countRows[player][row]; countRow++; countRows[player][row] = countRow; if (countRow == SIDE) return player == 0 ? "A" : "B"; int countColumn = countColumns[player][column]; countColumn++; countColumns[player][column] = countColumn; if (countColumn == SIDE) return player == 0 ? "A" : "B"; if (row == column) { int countDiagonal = countDiagonals[player][0]; countDiagonal++; countDiagonals[player][0] = countDiagonal; if (countDiagonal == SIDE) return player == 0 ? "A" : "B"; } if (row + column == SIDE  1) { int countDiagonal = countDiagonals[player][1]; countDiagonal++; countDiagonals[player][1] = countDiagonal; if (countDiagonal == SIDE) return player == 0 ? "A" : "B"; } } if (length == 9) return "Draw"; else return "Pending"; } }

// OJ: https://leetcode.com/problems/findwinneronatictactoegame/ // Time: O(1) // Space: O(1) class Solution { string check(int A[3][3]) { for (int i = 0; i < 3; ++i) { int j = 1; while (j < 3 && A[i][0] != 0 && A[i][j] == A[i][0]) ++j; if (j == 3) return A[i][0] == 1 ? "A" : "B"; j = 1; while (j < 3 && A[0][i] != 0 && A[j][i] == A[0][i]) ++j; if (j == 3) return A[0][i] == 1 ? "A" : "B"; } int i = 1; while (i < 3 && A[0][0] != 0 && A[i][i] == A[0][0]) ++i; if (i == 3) return A[0][0] == 1 ? "A" : "B"; i = 1; while (i < 3 && A[0][2] != 0 && A[i][2  i] == A[0][2]) ++i; if (i == 3) return A[0][2] == 1 ? "A" : "B"; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (A[i][j] == 0) return "Pending"; } } return "Draw"; } public: string tictactoe(vector<vector<int>>& moves) { int A[3][3] = {}, ch = 1; for (auto &m : moves) { A[m[0]][m[1]] = ch; ch = ch == 1 ? 2 : 1; } return check(A); } };

# 1275. Find Winner on a Tic Tac Toe Game # https://leetcode.com/problems/findwinneronatictactoegame/ class Solution: def tictactoe(self, moves: List[List[int]]) > str: grid = [[""]*3 for _ in range(3)] player = 0 for r,c in moves: grid[r][c] = "X" if player % 2 == 0 else "O" player += 1 for r in range(3): if all(b == "X" for b in grid[r]): return "A" elif all(b == "O" for b in grid[r]): return "B" for c in range(3): if all(grid[i][j] == "X" for i in range(3) for j in range(3) if j == c): return "A" elif all(grid[i][j] == "O" for i in range(3) for j in range(3) if j == c): return "B" if all(grid[r][c] == "X" for r in range(3) for c in range(3) if r == c): return "A" if all(grid[r][c] == "O" for r in range(3) for c in range(3) if r == c): return "B" if all(grid[r][c] == "X" for r in range(2,1,1) for c in range(2,1,1) if r + c == 2): return "A" if all(grid[r][c] == "O" for r in range(2,1,1) for c in range(2,1,1) if r + c == 2): return "B" return "Draw" if player == 9 else "Pending"