1.code
class Solution {
public boolean check(String[]board,char c){
for(int i=0;i<3;i++){
if(board[0].toCharArray()[i]==c&&board[1].toCharArray()[i]==c&&board[2].toCharArray()[i]==c){
return true;
}
if(board[i].toCharArray()[0]==c&&board[i].toCharArray()[1]==c&&board[i].toCharArray()[2]==c){
return true;
}
}
if(board[0].toCharArray()[0]==c&&board[1].toCharArray()[1]==c&&board[2].toCharArray()[2]==c){
return true;
}
if(board[0].toCharArray()[2]==c&&board[1].toCharArray()[1]==c&&board[2].toCharArray()[0]==c){
return true;
}
return false;
}
public boolean validTicTacToe(String[] board) {
int xCount = 0;
int oCount = 0;
for(int i=0;i<3;i++){
for(char c:board[i].toCharArray()){
if(c=='X')xCount++;
if(c=='O')oCount++;
}
}
if(xCount!=oCount&&xCount-1!=oCount)return false;
if(xCount-1!=oCount&&check(board,'X'))return false;
if(xCount!=oCount&&check(board,'O'))return false;
return true;
}
}
2.题解分析
*X元素的数量一定大于等于O的数量
*如果X玩家获胜,情况一定是X的数量比O多
*如果O玩家获胜,情况一定是X的数量和O一样多
*棋盘中有且仅有出现连着的一行,无论横着,竖着还是对角斜着元素3个相同