天天看點

【牛客網】井字棋

題目描述

對于一個給定的井字棋棋盤,請設計一個高效算法判斷目前玩家是否獲勝。

給定一個二維數組board,代表目前棋盤,其中元素為1的代表是目前玩家的棋子,為0表示沒有棋子,為-1代 表是對方玩家的棋子。

測試樣例:

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

傳回:true

解題思路

井字棋有四種情況表示目前玩家獲勝,1代表目前玩家棋子 1. 行全為1, 即行的和為3 2. 列全為1, 列的和為 3 3. 主對角全為1, 對角和為3 4. 副對角全為1, 對角和為3 5. 如果擴充為N*N的話,判斷和是否等于N,下 面代碼适用任何情況

完整代碼

class Board {
public:
    bool checkWon(vector<vector<int> > board) {
        if((board[0][0]+board[1][1]+board[2][2])==3)  //正對角線
            return true;
        if((board[0][2]+board[1][1]+board[2][0])==3)   //反對角線
            return true; 
        for(int i=0;i<3;i++)
        {
            int a=0;
            int b=0;
            for(int j=0;j<3;j++)
            {
                a+=board[i][j];      //行
                b+=board[j][i];      //列
            }
            if(a==3)
                return true;
            if(b==3)
                return true;
        }
        return false;
    }
};