思路
- 如何为获胜?——某行某列某对角线全为同个人放置
- 如何表示两个player?——使用+1 和-1 表示,减少空间开销
- 使用多少标记变量?——全行 全列 两个对角线
代码
class TicTacToe {
public:
vector<int> rows;
vector<int> cols;
int diag1 = 0;
int diag2 = 0;
int size;
TicTacToe(int n) {
rows.resize(n,0);
cols.resize(n,0);
size = n;
}
int move(int row, int col, int player) {
int tmp;
if(player == 1)
tmp = 1;
else
tmp = -1;
rows[row] += tmp;
cols[col] += tmp;
if(row == col)
diag1 += tmp;
if(row + col == size-1)
diag2 += tmp;
if(rows[row] == size || cols[col] == size || diag1 == size || diag2 == size)
return player;
if(rows[row] == -size || cols[col] == -size || diag1 == -size || diag2 == -size)
return player;
return 0;
}
};