力扣794:
用字符串数组作为井字游戏的游戏板
board
,判断该游戏板有没有可能最终形成
游戏板是一个
3 x 3
数组,由字符
" "
,
"X"
和
"O"
组成。字符
" "
代表一个空位。
两个玩家轮流将字符放入空位,一个玩家执
X
棋,另一个玩家执
O
棋
“X”
和
“O”
只允许放置在空位中,不允许对已放有字符的位置进行填充。
当有
3
个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,
board
生成
public static boolean validBoard(String[] board) {
//X赢了 X-O=1
//O赢了 X-O=0
//胜负未分 X-O=1 X-O=0
int xCount=0,oCount=0;
for(int i=0;i<3;i++) {
char[] board1=board[i].toCharArray();
for(int j=0;j<3;j++) {
if(board1[j]=='X') {
xCount++;
}
if(board1[j]=='O'){
oCount++;
}
}
}
if(xCount!=oCount&&xCount-oCount!=1) {
return false;
}
if(win(board,"XXX")&&xCount-oCount!=1) {
return false;
}
if(win(board,"OOO")&&oCount-xCount!=0) {
return false;
}
return true;
}
public static boolean win(String[] board,String flag) {
for(int i=0;i<3;i++) {
//纵向3连
if(flag.equals(""+board[0].charAt(i)+board[1].charAt(i)+board[2].charAt(i))) {
return true;
}
//横向3连
if(flag.equals(""+board[i])) {
return true;
}
}
// \向3连
if(flag.equals(""+board[0].charAt(0)+board[1].charAt(1)+board[2].charAt(2))) {
return true;
}
// /向3连
if(flag.equals(""+board[0].charAt(2)+board[1].charAt(1)+board[2].charAt(0))) {
return true;
}
return false;
}