LeetCode 面試題 16.04. 井字游戲 Java


一看到井字棋游戲最先想到決策樹,這個題是直接判斷輸贏。注意不是9個格子,是N*N個格子。那么第一步應該把一維數組放到二維數組中,否則無法遍歷。

遇到X,轉換成1。遇到O,轉換成-1。否則為0
遍歷二維數組的每一行,每一列,兩條對角線。如果和為N,則輸出"X",和為-N,則輸出"O"。遍歷時需要保存0的數量,用於判斷還有沒有空位。flag表示有無勝利者。

class Solution {
    public String tictactoe(String[] board) {
        int n = board.length;
        int ox[][] = new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(board[i].charAt(j) == 'X'){
                    ox[i][j] = 1;
                }else if(board[i].charAt(j) == 'O'){
                    ox[i][j] = -1;
                }else{
                    ox[i][j] = 0;
                }
            }
        }
        return win(ox);
    }

    public String win(int nums[][]){
        int n=nums.length;
        int rowsum=0,colsum=0,zeronum=0,diagonal1=0,diagonal2=0;
        boolean flag=false;
        for(int i=0;i<nums.length;i++){
            rowsum=0;
            for(int j=0;j<nums.length;j++){
                if(nums[i][j]==0){
                    zeronum++;
                }
                rowsum+=nums[i][j];
                if(i==j){
                    diagonal1+=nums[i][j];
                }
            }
            if(rowsum==n){
                flag=true;
                return "X";
            }
            if(rowsum==-n){
                flag=true;
                return "O";
            }
        }
        if(diagonal1==n){
            flag=true;
            return "X";
        }
        if(diagonal1==-n){
            flag=true;
            return "O";
        }
        for(int j=0;j<n;j++){
            colsum=0;
            for(int i=0;i<n;i++){
                colsum+=nums[i][j];
                if(i+j==n-1){
                    diagonal2+=nums[i][j];
                }
            }
            if(colsum==n){
                flag=true;
                return "X";
            }
            if(colsum==-n){
                flag=true;
                return "O";
            }
        }
        if(diagonal2==n){
            flag=true;
            return "X";
        }
        if(diagonal2==-n){
            flag=true;
            return "O";
        }
        if(!flag){
            if(zeronum==0){
                return "Draw";
            }else{
                return "Pending";
            }
        }
        return null;
    }
}


免責聲明!

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



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