本来想用Go写个深度遍历,结果有些bug,所以换了java写了个模拟,参考了别人的评论,才知道需要判定胜负不同情况下的O与X的值。这个地方欠考虑了。
// X必须比O多1个或者相同,否则false; 2、X和O不能同时都是赢家,否则false; 3、X赢的时候必须比O多1个,否则false; 4、O赢得时候个数与X相同,否则false;
java版本
class Solution {
public boolean validTicTacToe(String[] board) {
int count_o=0,count_x=0;
for(int i=0;i<3;i++){
for(char c : board[i].toCharArray()){
count_o= c=='O' ? count_o+1 : count_o;
count_x= c=='X' ? count_x+1 : count_x;
}
}
System.out.println(count_o);
System.out.println(count_x);
if (count_x!=count_o && count_o!=count_x-1){
return false;
}
if(dfs(board,'X') && count_x!=count_o+1){
return false;
}
if (dfs(board,'O') && count_x!=count_o){
return false;
}
return true;
//
// X必须比O多1个或者相同,否则false; 2、X和O不能同时都是赢家,否则false; 3、X赢的时候必须比O多1个,否则false; 4、O赢得时候个数与X相同,否则false;
}
public boolean dfs(String[] board,char tmp){
for(int i=0;i<board.length;i++) {
// 直线情况
if(board[i].charAt(0)==tmp && board[i].charAt(1)==tmp && board[i].charAt(2)==tmp ){
return true;
}
if(board[0].charAt(i)==tmp && board[1].charAt(i)==tmp && board[2].charAt(i)==tmp ){
return true;
}
}
if(board[0].charAt(0)==tmp && board[1].charAt(1)==tmp && board[2].charAt(2)==tmp ){
return true;
}
if(board[0].charAt(2)==tmp && board[1].charAt(1)==tmp && board[2].charAt(0)==tmp ){
return true;
}
return false;
}
}
网友评论