井字棋

井字棋

/*
2022年09月21日 11:43:09
1  0  1
1 -1 -1
1 -1  0
利用sum,累加行、列、对角线的1,判断累加和是否和行、列的size相等
*/
class Board {
  public:
    bool checkWon(vector<vector<int> > board) {
        int row = board.size();
        int col = board[0].size();
        // 检查行
        for(int i = 0; i < row; ++i){
            int sum = 0;
            for(int j = 0; j < col; ++j){
                sum += board[i][j];
            }
            if(sum == col)
                return true;
        }
        // 检查列
        for(int i = 0; i < col; ++i){
            int sum = 0;
            for(int j = 0; j < row; ++j){
                sum += board[j][i];
            }
            if(sum == row)
                return true;
        }
        // 检查对角线
        int sum = 0;
        for(int i = 0; i <row; ++i){
            sum += board[i][i];
        }
        if(sum == row)
            return true;
        // 检查斜对角线
        sum = 0;
        for(int i = 0; i < row; ++i){
            sum += board[i][col-1-i];
        }
        if(sum == row)
            return true;
        return false; // 都不满足
    }
};

最好先把row、col计算出来,不然多次调用size函数降低效率。