leetcode:井字游戏

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值