Design a Tic-Tac-Toe
Tags:
Medium
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Problem
Khi chơi Tic-tact-toe (Cờ caro), để kiểm tra xem một người chơi có thắng hay không, chúng ta chỉ cần theo dõi:
Nếu bất kỳ hàng, cột hoặc đường chéo nào có đủ số ô bằng kích thước bảng n, nghĩa là người đó thắng
Approach
Solution
1class TicTacToe {
2 private n: number; // Kích thước bảng
3 private rows: number[]; // Mảng đếm số dấu trong từng hàng
4 private cols: number[]; // Mảng đếm số dấu trong từng cột
5 private diagonal: number; // Đường chéo chính
6 private antiDiagonal: number; // Đường chéo phụ
7
8 constructor(n: number) {
9 this.n = n;
10 this.rows = Array(n).fill(0); // Khởi tạo mảng đếm cho hàng
11 this.cols = Array(n).fill(0); // Khởi tạo mảng đếm cho cột
12 this.diagonal = 0; // Khởi tạo đường chéo chính
13 this.antiDiagonal = 0; // Khởi tạo đường chéo phụ
14 }
15
16 move(row: number, col: number, player: number): number {
17 const add = player === 1 ? 1 : -1; // Người chơi 1: +1, Người chơi 2: -1
18
19 // Cập nhật hàng và cột
20 this.rows[row] += add;
21 this.cols[col] += add;
22
23 // Cập nhật đường chéo chính nếu ô thuộc đường này
24 if (row === col) {
25 this.diagonal += add;
26 }
27
28 // Cập nhật đường chéo phụ nếu ô thuộc đường này
29 if (row + col === this.n - 1) {
30 this.antiDiagonal += add;
31 }
32
33 // Kiểm tra điều kiện thắng
34 if (
35 Math.abs(this.rows[row]) === this.n || // Hàng đủ n dấu
36 Math.abs(this.cols[col]) === this.n || // Cột đủ n dấu
37 Math.abs(this.diagonal) === this.n || // Đường chéo chính đủ n dấu
38 Math.abs(this.antiDiagonal) === this.n // Đường chéo phụ đủ n dấu
39 ) {
40 return player; // Người chơi thắng
41 }
42
43 return 0; // Không ai thắng
44 }
45}
46