Find Winner on a Tic Tac Toe Game - Problem

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 moves[i] = [rowi, coli] indicates that the ith move will be played on grid[rowi][coli].

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.

Input & Output

Example 1 — Player A Wins
$ Input: moves = [[0,0],[2,0],[1,1],[1,0],[2,1]]
Output: A
💡 Note: Player A (X) places at positions creating column: (0,0), (1,1), (2,1). After move 5, A has three X's in column 1, so A wins.
Example 2 — Draw Game
$ Input: moves = [[0,0],[1,1],[0,1],[0,2],[1,0],[2,0],[1,2],[2,1],[2,2]]
Output: Draw
💡 Note: All 9 squares are filled with no three in a row. The game ends in a draw.
Example 3 — Game Pending
$ Input: moves = [[0,0],[1,1],[2,0]]
Output: Pending
💡 Note: Only 3 moves played, no winner yet, and the board is not full. Game is still pending.

Constraints

  • 1 ≤ moves.length ≤ 9
  • moves[i].length == 2
  • 0 ≤ rowi, coli ≤ 2
  • There are no repeated moves.
  • moves follow the rules of tic tac toe.

Visualization

Tap to expand
Tic Tac Toe Winner Detection INPUT moves = [[0,0],[2,0],[1,1],[1,0],[2,1]] X 1st O 2nd X 3rd O 4th X 5th Player A: X (odd moves) Player B: O (even moves) Move Sequence: [0,0]->[2,0]->[1,1]->[1,0]->[2,1] ALGORITHM STEPS 1 Initialize Counters rows[3], cols[3], diag, anti 2 Process Each Move A: +1, B: -1 to counters Counter State After Move 5: rows: [1, 0, 1] cols: [1, 3, -1] cols[1]=3 ---> WIN! diag: 2, antiDiag: 1 3 Check Win Condition If any counter = 3 or -3 4 Determine Result 3: A wins, -3: B wins cols[1] = 3 (equals 3) Player A Wins! Column 1 complete: X X X FINAL RESULT X X O O X X Winner: "A" Output: "A" Player A wins with 3 X's in column 1 (middle) Key Insight: Count-Based Tracking Instead of checking all 8 winning combinations after each move, use counters for rows, columns, and diagonals. Add +1 for Player A's moves, -1 for Player B's moves. When any counter reaches 3 or -3, that player wins. Time Complexity: O(n) where n = number of moves. Space Complexity: O(1) - fixed size counters. TutorialsPoint - Find Winner on a Tic Tac Toe Game | Count-Based Tracking Approach
Asked in
Amazon 15 Microsoft 8
28.0K Views
Medium Frequency
~15 min Avg. Time
845 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen