很无聊的一个题……
解题思路
游戏结束的三种情况
1、玩家1获胜,此时X的个数=O的个数+1
2、玩家2获胜,此时X的个数=O的个数
3、无人获胜,棋盘满了,此时X的个数==O的个数+1,X+O=9
代码
class Solution {
public:
bool validTicTacToe(vector<string>& board) {
int xCount=0,oCount=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
xCount=board[i][j]=='X'?xCount+1:xCount;
oCount=board[i][j]=='O'?oCount+1:oCount;
}
}
//不满足条件
if(xCount!=oCount&&xCount!=oCount+1)return false;
//如果玩家1获胜
if(win(board,'X')&&xCount!=oCount+1)return false;
//如果玩家2获胜
if(win(board,'O')&&xCount!=oCount)return false;
return true;
}
bool win(vector<string>& board,char c)
{
for(int i=0;i<3;i++)
{
//横排是否能获胜
if(board[i][0]==c&&board[i][1]==c&&board[i][2]==c)return true;
//纵排是否能获胜
if(board[0][i]==c&&board[1][i]==c&&board[2][i]==c)return true;
}
//对角线是否能获胜
if(board[0][0]==c&&board[1][1]==c&&board[2][2]==c)return true;
if(board[0][2]==c&&board[1][1]==c&&board[2][0]==c)return true;
return false;
}
};
//玩家1获胜:xCount=oCount+1
//玩家2获胜:xCount=oCount