#1275
Easy Algorithms Find winner on a tic tac toe game
Array Hash Table Matrix Simulation
54.5% acceptance
Feb 25, 2026
1624
370
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.
Solution
Rust
Time O(n)
Space O(1)
impl Solution {
pub fn tictactoe(moves: Vec<Vec<i32>>) -> String {
let mut board = [[0i32; 3]; 3];
for (i, m) in moves.iter().enumerate() {
board[m[0] as usize][m[1] as usize] = if i % 2 == 0 { 1 } else { -1 };
}
let wins = |player: i32| -> bool {
for i in 0..3 {
if board[i].iter().all(|&x| x == player) { return true; }
if (0..3).all(|j| board[j][i] == player) { return true; }
}
if (0..3).all(|i| board[i][i] == player) { return true; }
if (0..3).all(|i| board[i][2-i] == player) { return true; }
false
};
if wins(1) { "A".to_string() }
else if wins(-1) { "B".to_string() }
else if moves.len() == 9 { "Draw".to_string() }
else { "Pending".to_string() }
}
}