1275. Find Winner on a Tic Tac Toe Game
В игру "Крестики-нолики" играют два игрока A и B на сетке 3 x 3. Правила игры "Крестики-нолики" таковы: игроки по очереди помещают символы в пустые квадраты ' '. Первый игрок A всегда помещает символы "X", а второй игрок B - "O". Символы "X" и "O" всегда помещаются в пустые квадраты, а не в заполненные.
Игра заканчивается, когда три одинаковых (непустых) символа заполняют любую строку, столбец или диагональ. Игра также заканчивается, если все клетки непустые. Больше ходов не может быть сыграно, если игра закончена. Учитывая двумерный целочисленный массив moves, где moves[i] = [rowi, coli] указывает, что i-й ход будет сыгран на сетке[rowi][coli]. верните победителя игры, если он существует (A или B). Если игра закончилась вничью, верните "Ничья". Если еще есть ходы для игры, верните "Pending". Можно предположить, что ходы действительны (т.е. соответствуют правилам игры в Крестики-нолики), сетка изначально пуста, и A будет играть первым.
Пример:
Input: moves = [[0,0],[2,0],[1,1],[2,1],[2,2]]
Output: "A"
C# решение
сопоставлено/оригиналpublic class Solution {
public string Tictactoe(int[][] moves) {
char[,] grid = new char[3,3];
for (int i = 0; i < moves.Length; i++) {
grid[moves[i][0], moves[i][1]] = (i % 2 == 0) ? 'X' : 'O';
}
for (int i = 0; i < 3; i++) {
if (grid[i, 0] == grid[i, 1] && grid[i, 1] == grid[i, 2] && grid[i, 0] != '\0')
return grid[i, 0] == 'X' ? "A" : "B";
if (grid[0, i] == grid[1, i] && grid[1, i] == grid[2, i] && grid[0, i] != '\0')
return grid[0, i] == 'X' ? "A" : "B";
}
if (grid[0, 0] == grid[1, 1] && grid[1, 1] == grid[2, 2] && grid[0, 0] != '\0')
return grid[0, 0] == 'X' ? "A" : "B";
if (grid[0, 2] == grid[1, 1] && grid[1, 1] == grid[2, 0] && grid[0, 2] != '\0')
return grid[0, 2] == 'X' ? "A" : "B";
return moves.Length == 9 ? "Draw" : "Pending";
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public string Tictactoe(int[][] moves) {
char[,] grid = new char[3,3];
for (int i = 0; i < moves.size(); i++) {
grid[moves[i][0], moves[i][1]] = (i % 2 == 0) ? 'X' : 'O';
}
for (int i = 0; i < 3; i++) {
if (grid[i, 0] == grid[i, 1] && grid[i, 1] == grid[i, 2] && grid[i, 0] != '\0')
return grid[i, 0] == 'X' ? "A" : "B";
if (grid[0, i] == grid[1, i] && grid[1, i] == grid[2, i] && grid[0, i] != '\0')
return grid[0, i] == 'X' ? "A" : "B";
}
if (grid[0, 0] == grid[1, 1] && grid[1, 1] == grid[2, 2] && grid[0, 0] != '\0')
return grid[0, 0] == 'X' ? "A" : "B";
if (grid[0, 2] == grid[1, 1] && grid[1, 1] == grid[2, 0] && grid[0, 2] != '\0')
return grid[0, 2] == 'X' ? "A" : "B";
return moves.size() == 9 ? "Draw" : "Pending";
}
}
Java решение
auto-draft, проверить перед отправкойimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public String Tictactoe(int[][] moves) {
char[,] grid = new char[3,3];
for (int i = 0; i < moves.length; i++) {
grid[moves[i][0], moves[i][1]] = (i % 2 == 0) ? 'X' : 'O';
}
for (int i = 0; i < 3; i++) {
if (grid[i, 0] == grid[i, 1] && grid[i, 1] == grid[i, 2] && grid[i, 0] != '\0')
return grid[i, 0] == 'X' ? "A" : "B";
if (grid[0, i] == grid[1, i] && grid[1, i] == grid[2, i] && grid[0, i] != '\0')
return grid[0, i] == 'X' ? "A" : "B";
}
if (grid[0, 0] == grid[1, 1] && grid[1, 1] == grid[2, 2] && grid[0, 0] != '\0')
return grid[0, 0] == 'X' ? "A" : "B";
if (grid[0, 2] == grid[1, 1] && grid[1, 1] == grid[2, 0] && grid[0, 2] != '\0')
return grid[0, 2] == 'X' ? "A" : "B";
return moves.length == 9 ? "Draw" : "Pending";
}
}
JavaScript решение
сопоставлено/оригиналvar tictactoe = function(moves) {
const grid = [['', '', ''], ['', '', ''], ['', '', '']];
for (let i = 0; i < moves.length; i++) {
const [r, c] = moves[i];
grid[r][c] = i % 2 === 0 ? 'X' : 'O';
}
for (let i = 0; i < 3; i++) {
if (grid[i][0] === grid[i][1] && grid[i][1] === grid[i][2] && grid[i][0] !== '') {
return grid[i][0] === 'X' ? 'A' : 'B';
}
if (grid[0][i] === grid[1][i] && grid[1][i] === grid[2][i] && grid[0][i] !== '') {
return grid[0][i] === 'X' ? 'A' : 'B';
}
}
if (grid[0][0] === grid[1][1] && grid[1][1] === grid[2][2] && grid[0][0] !== '') {
return grid[0][0] === 'X' ? 'A' : 'B';
}
if (grid[0][2] === grid[1][1] && grid[1][1] === grid[2][0] && grid[0][2] !== '') {
return grid[0][2] === 'X' ? 'A' : 'B';
}
return moves.length === 9 ? 'Draw' : 'Pending';
};
Go решение
сопоставлено/оригиналfunc tictactoe(moves [][]int) string {
grid := [3][3]byte{}
for i, move := range moves {
if i%2 == 0 {
grid[move[0]][move[1]] = 'X'
} else {
grid[move[0]][move[1]] = 'O'
}
}
for i := 0; i < 3; i++ {
if grid[i][0] == grid[i][1] && grid[i][1] == grid[i][2] && grid[i][0] != 0 {
if grid[i][0] == 'X' {
return "A"
} else {
return "B"
}
}
if grid[0][i] == grid[1][i] && grid[1][i] == grid[2][i] && grid[0][i] != 0 {
if grid[0][i] == 'X' {
return "A"
} else {
return "B"
}
}
}
if grid[0][0] == grid[1][1] && grid[1][1] == grid[2][2] && grid[0][0] != 0 {
if grid[0][0] == 'X' {
return "A"
} else {
return "B"
}
}
if grid[0][2] == grid[1][1] && grid[1][1] == grid[2][0] && grid[0][2] != 0 {
if grid[0][2] == 'X' {
return "A"
} else {
return "B"
}
}
if len(moves) == 9 {
return "Draw"
}
return "Pending"
}
Algorithm
Инициализируйте пустую 3x3 сетку.
Пройдите по списку ходов и обновите сетку в соответствии с ходами игроков A и B.
После каждого хода проверяйте, есть ли победитель. Если все ходы сделаны и нет победителя, проверьте, завершена ли игра вничью или еще есть ходы.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.