题目描述

对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。
给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。

测试样例:

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

返回:true

//扩展到N阶的棋盘同样适用;
class Board {
public:
    bool checkWon(vector<vector<int> > board) {
        // write code here
        int len=board.size();
        //检查行
        for(int i=0;i<len;i++)
        {
            int sum=0;
            for(int j=0;j<len;j++)
                sum+=board[i][j];
            if(sum==len)
                return true;
        }
        //检查列
        for(int i=0;i<len;i++)
        {
            int sum=0;
            for(int j=0;j<len;j++)
                sum+=board[j][i];
            if(sum==len)
                return true;
        }
        //检查主对角线
        int temp=0;
        for(int i=0;i<len;i++)
        {
            temp+=board[i][i];
        }
        if(temp==len) return true;
         
        //检查副对角线
        temp=0;
        for(int i=0;i<len;i++)
        {
            temp+=board[i][len-i-1];
        }
        if(temp==len) return true;
         
        return false;
    }
};

<stron>:井字棋</stron>