牛客網:井字棋

鏈接:https://www.nowcoder.com/questionTerminal/e1bb714eb9924188a0d5a6df2216a3d1?mutiTagIds=578_584_585_640&orderByHotValue=1&commentTags=C/C++

題目描述

對於一個給定的井字棋棋盤,請設計一個高效算法判斷當前玩家是否獲勝。
給定一個二維數組board,代表當前棋盤,其中元素爲1的代表是當前玩家的棋子,爲0表示沒有棋子,爲-1代表是對方玩家的棋子。

測試樣例:

[[1,0,1],[1,-1,-1],[1,-1,0]]

返回:

true

class Board {
public:
    bool checkWon(vector<vector<int> > board) {
        // write code here
        int rows = board.size();
        int cols = board[0].size();
        
        int i = 0, j = 0;
        for(i = 0; i < rows; i++){
            if((board[i][0] == board[i][1]) &&
               (board[i][0] == board[i][2]) &&
               (board[i][0] == 1)){
                return true;
            }
        }
        
        for(j = 0; j < cols; j++){
            if((board[0][j] == board[1][j]) &&
                (board[0][j] == board[2][j]) &&
                 (board[0][j] == 1)){
                return true;
            }
        }
        
        if(board[0][0] == board[1][1] &&
          board[0][0] == board[2][2] &&
          board[0][0] == 1){
            return true;
        }
        
        if(board[2][0] == board[1][1] &&
          board[2][0] == board[0][2] &&
          board[2][0] == 1){
            return true;
        }
        
        return false;
    }
};

比較簡單的簡答方法:

 bool checkWon(vector<vector<int> > a) {
       if(a[0][0]+a[1][1]+a[2][2]==3) return true;
       if(a[0][2]+a[1][1]+a[2][0]==3) return true;
       for(int i=0;i<3;i++){
            if(a[i][0]+a[i][1]+a[i][2]==3) return true;
            if(a[0][i]+a[1][i]+a[2][i]==3) return true;
       }
       return false;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章