348. Design Tic-Tac-Toe

130 阅读1分钟

image.png

方法

  • 两个玩家,其中一个玩家下棋,在格子里记1分,另一个记-1。
  • 产生赢家的条件:某一行/某一列/两个对角线之一 的分数为3或者-3

image.png

class TicTacToe {
    int size;
    int[][] board;
    int[] scoreRow;
    int[] scoreCol;
    int scoreDiagonol1;
    int scoreDiagonol2;
    public TicTacToe(int n) {
        size = n;
        board = new int[n][n];
        scoreRow = new int[n];
        scoreCol = new int[n];
        scoreDiagonol1 = 0;
        scoreDiagonol2 = 0;
    }
    
    public int move(int row, int col, int player) {
        int score = 1;
        if (player == 2) {
            score = -1;
        }
        
        scoreRow[row] += score;
        scoreCol[col] += score;

        if (row == col) {
            scoreDiagonol1 += score;
        }

        if (row + col == size - 1) {
            scoreDiagonol2 += score;
        }

        // check winning conditions
        if ( Math.abs(scoreRow[row]) == size || Math.abs(scoreCol[col]) == size 
        || Math.abs(scoreDiagonol1) == size || Math.abs(scoreDiagonol2) == size) {
            return player;
        }

        return 0;
     }
}

/**
 * Your TicTacToe object will be instantiated and called as such:
 * TicTacToe obj = new TicTacToe(n);
 * int param_1 = obj.move(row,col,player);
 */