题意

【力扣·每日一题】794.有效的井字游戏(模拟)_i++

思路:

判断步数是否合法,【力扣·每日一题】794.有效的井字游戏(模拟)_leetcode_02【力扣·每日一题】794.有效的井字游戏(模拟)_算法_03数量意义或【力扣·每日一题】794.有效的井字游戏(模拟)_算法_03【力扣·每日一题】794.有效的井字游戏(模拟)_leetcode_02多一。
再判断两种合法的步数是否为对应的一方赢。
判断是否赢就是遍历每行每列和对角线是否是三个一样的,

代码:

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;
}
};