题意
思路:
判断步数是否合法,x和o数量意义或o比x多一。
再判断两种合法的步数是否为对应的一方赢。
判断是否赢就是遍历每行每列和对角线是否是三个一样的,
代码:
class Solution { public: bool validTicTacToe(vector<string>& board) { int x=0,o=0; for(string s:board){ for(char t:s){ if(t=='X') x++; else if(t=='O') o++; } } if(x!=o){ if(o!=x-1) return false; } if(o!=x-1&&check(board,'X')) return false; if(o!=x&&check(board,'O')) return false; return true; } bool check(vector<string>& b, char t) { if(t==b[0][0]&&b[0][0]==b[1][1]&&b[1][1]==b[2][2]) return true; if(t==b[0][2]&&b[0][2]==b[1][1]&&b[1][1]==b[2][0]) return true; for(int i=0;i<=2;i++){ if(t==b[i][0]&&b[i][0]==b[i][1]&&b[i][1]==b[i][2]) return true; if(t==b[0][i]&&b[0][i]==b[1][i]&&b[1][i]==b[2][i]) return true; } return false; } };