[Leetcode] Design Tic-Tac-Toe 设计精子游戏

Design Tic-Tac-Toe

Design a Tic-tac-toe game that is played between two players on a n x n grid.

You may assume the following rules:

A move is guaranteed to be valid and is placed on an empty block.
Once a winning condition is reached, no more moves is allowed.
A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.

复杂度

O(1) 时间 O(N) 空间

思路

数据结构:
两个大小为n的一维数组计数器rows和cols,对角线计数器diag和逆对角线计数器anti_diag
思路:
如果玩家1在第一行某一列放了一个子,那么rows[row]自增1,cols[col]自增1,如果玩家2在第一行某一列放了一个子,则rows[row]自减1,cols[col]自减1,于是当rows[row]等于n或者-n的时候,或者cols[col]等于n或者-n,则游戏结束返回该玩家即可,对角线和逆对角线如法炮制

注意

注意判断对角线的时候,是两个if并列的,不是if else,因为一个点有可能既是正对角线,也是反对角线,那就是中间的点。

代码

public class TicTacToe {
int n;
int[] rows;
int[] cols;
int diagonal;
int anti_diagonal;
int wins;
/ Initialize your data structure here. */
public TicTacToe(int n) {
this.n = n;
rows = new int[n];
cols = new int[n];
diagonal = 0;
anti_diagonal = 0;
wins = 0;
}

/  Player {player} makes a move at ({row}, {col}).    @param row The row of the board.    @param col The column of the board.    @param player The player, can be either 1 or 2.    @return The current winning condition, can be either:            0: No one wins.            1: Player 1 wins.            2: Player 2 wins. */public int move(int row, int col, int player) {    if (player == 1) {        rows[row]++;        cols[col]++;        if (row == col)            diagonal++;        if (row + col == n - 1)            anti_diagonal++;    }    else if (player == 2) {        rows[row]--;        cols[col]--;        if (row == col)            diagonal--;        if (row + col == n - 1)            anti_diagonal--;    }    if (rows[row] == n || cols[col] == n || diagonal == n || anti_diagonal == n)        wins = 1;    else if (rows[row] == -n || cols[col] == -n || diagonal == -n || anti_diagonal == -n)        wins = 2;    return wins;}

}

关键字:leetcode, uber, row, col

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部