具体思路:
自己想的是直接遍历每个落子点的行列对角线即可;
但是题解里有更好的方法;
既然记录状态,只需要分开记录每一行每一列对角线的落子个数即可;
所以每一行就可以有(n,int)的二位数组代替;
唯一值得注意的是,对角线的判定条件是row=col和row+col=n-1;
具体算法:
class TicTacToe {
public:
TicTacToe(int n) {
this->n=n;
r.resize(2,vector<int>(n,0));
l.resize(2,vector<int>(n,0));
pix.resize(2,vector<int>(2,0));
}
int move(int row, int col, int player) {
int index=player-1;
if(++r[index][row]==n)
return player;
if(++l[index][col]==n)
return player;
if(row==col&&++pix[index][0]==n)
return player;
if(row+col==n-1&&++pix[index][1]==n)
return player;
return 0;
}
private:
int n;
vector<vector<int>> r,l,pix;
};
/**
* Your TicTacToe object will be instantiated and called as such:
* TicTacToe* obj = new TicTacToe(n);
* int param_1 = obj->move(row,col,player);
*/