1275. Find Winner on a Tic Tac Toe Game

LeetCode easy original: C# #array #csharp #easy #leetcode #matrix #queue #search #string
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

В игру "Крестики-нолики" играют два игрока A и B на сетке 3 x 3. Правила игры "Крестики-нолики" таковы: игроки по очереди помещают символы в пустые квадраты ' '. Первый игрок A всегда помещает символы "X", а второй игрок B - "O". Символы "X" и "O" всегда помещаются в пустые квадраты, а не в заполненные.

Игра заканчивается, когда три одинаковых (непустых) символа заполняют любую строку, столбец или диагональ. Игра также заканчивается, если все клетки непустые. Больше ходов не может быть сыграно, если игра закончена. given двумерный 整数 配列 moves, где moves[i] = [rowi, coli] указывает, что i-й ход будет сыгран на сетке[rowi][coli]. return победителя игры, если он существует (A или B). Если игра закончилась вничью, return "Ничья". Если еще есть ходы для игры, return "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++ 解法

自動ドラフト、提出前に確認
#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 解法

自動ドラフト、提出前に確認
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.

После каждого хода проверяйте, есть ли победитель. Если все ходы сделаны и нет победителя, проверьте, завершена ли игра вничью или еще есть ходы.

😎

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。