class Solution {
public:
bool check(vector<string>& board, char c){
// 行和列
for (int i = 0; i < 3; ++i){
if(c == board[i][0] && c == board[i][1] && c == board[i][2]){
return true;
}
if(c == board[0][i] && c == board[2][i] && c == board[2][i]){
return true;
}
}
// 对角线
if(c == board[0][0] && c == board[1][1] && c == board[2][2]){
return true;
}
if(c == board[2][0] && c == board[1][1] && c == board[0][2]){
return true;
}
return false;
}
bool validTicTacToe(vector<string>& board) {
int num = 0;
for (int i = 0; i < 3; ++i){
for (int j = 0; j < 3; ++j){
if(board[i][j] == 'X'){
++num;
} else if (board[i][j] == 'O'){
--num;
}
}
}
if((num < 0) || (num > 1)) {
return false;
}
bool xWin = check(board, 'X');
bool oWin = check(board, 'O');
if (xWin && !oWin) {
return (num == 1);
} else if (oWin && !xWin) {
return (num == 0);
} else if(oWin && xWin) {
return false;
}
return true;
}
};