程序員面試金典-面試題 16.04. 井字游戲


題目:

設計一個算法,判斷玩家是否贏了井字游戲。輸入是一個 N x N 的數組棋盤,由字符" ","X"和"O"組成,其中字符" "代表一個空位。

以下是井字游戲的規則:

玩家輪流將字符放入空位(" ")中。
第一個玩家總是放字符"O",且第二個玩家總是放字符"X"。
"X"和"O"只允許放置在空位中,不允許對已放有字符的位置進行填充。
當有N個相同(且非空)的字符填充任何行、列或對角線時,游戲結束,對應該字符的玩家獲勝。
當所有位置非空時,也算為游戲結束。
如果游戲結束,玩家不允許再放置字符。
如果游戲存在獲勝者,就返回該游戲的獲勝者使用的字符("X"或"O");如果游戲以平局結束,則返回 "Draw";如果仍會有行動(游戲未結束),則返回 "Pending"。

示例 1:

輸入: board = ["O X"," XO","X O"]
輸出: "X"
示例 2:

輸入: board = ["OOX","XXO","OXO"]
輸出: "Draw"
解釋: 沒有玩家獲勝且不存在空位
示例 3:

輸入: board = ["OOX","XXO","OX "]
輸出: "Pending"
解釋: 沒有玩家獲勝且仍存在空位
提示:

1 <= board.length == board[i].length <= 100
輸入一定遵循井字棋規則

分析:

用4個數組存儲O和X在行和列出現的個數,以及4個變量,O和X在左對角線和右對角線出現的次數。

遍歷完后對所有條件進行判斷。

程序:

class Solution {
    public String tictactoe(String[] board) {
        int n = board.length;
        int[] rowx = new int[n];
        int[] colx = new int[n];
        int[] rowo = new int[n];
        int[] colo = new int[n];
        int leftx = 0, rightx = 0, lefto = 0, righto = 0, flag = 0;
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < n; ++j){
                if(board[i].charAt(j) == 'X'){
                    rowx[i]++;
                    colx[j]++;
                    if(i == j)
                        leftx++;
                    if(i + j + 1 == n)
                        rightx++;
                }else if(board[i].charAt(j) == 'O'){
                    rowo[i]++;
                    colo[j]++;
                    if(i == j)
                        lefto++;
                    if(i + j + 1 == n)
                        righto++;
                }else{
                    flag = 1;
                }
            }
        }
        if(leftx == n || rightx == n) return "X";
        if(lefto == n || righto == n) return "O";

        for(int i = 0; i < n; ++i){
            if(rowx[i] == n || colx[i] == n) return "X";
            if(rowo[i] == n || colo[i] == n) return "O";
        }

        return flag == 1 ? "Pending" : "Draw";
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM