有效的井字游戏——解题技巧

本文解析了如何通过代码检查井字游戏中棋盘的有效状态,涉及X和O的交替放置策略,以及游戏结束条件。代码展示了如何统计X和O的数量,并检查行、列和对角线的胜利条件。时间空间复杂度分析也包含在内,适合理解游戏逻辑与算法效率的开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有效的井字游戏

题目穿送门
给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true 。

井字游戏的棋盘是一个 3 x 3 数组,由字符 ’ ',‘X’ 和 ‘O’ 组成。字符 ’ ’ 代表一个空位。

以下是井字游戏的规则:

玩家轮流将字符放入空位(’ ')中。
玩家 1 总是放字符 ‘X’ ,而玩家 2 总是放字符 ‘O’ 。
‘X’ 和 ‘O’ 只允许放置在空位中,不允许对已放有字符的位置进行填充。
当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。
当所有位置非空时,也算为游戏结束。
如果游戏结束,玩家不允许再放置字符。
示例 1:
在这里插入图片描述

输入:board = ["O “,” “,” "]
输出:false
解释:玩家 1 总是放字符 “X” 。

示例 2:
在这里插入图片描述

输入:board = [“XOX”," X “,” "]
输出:false
解释:玩家应该轮流放字符。

示例 3:
在这里插入图片描述

输入:board = [“XXX”," ",“OOO”]
输出:false

示例4
在这里插入图片描述

输入:board = [“XOX”,“O O”,“XOX”]
输出:true

思路

X 先手,因此X赢的话有以下集中情况。

  • 横着全为X
  • 竖着全为X
  • 对角线为X
    O后手,因此O赢的话也为这三种情况。
    两者都不赢:
  • 没有下到这么多子
  • 穷盘满了,都不为赢的情况

细节:

  • O为后手,因此O的个数要等于X的个数
  • X为前手,因此X赢的时候比O多一个

代码

class Solution {
   
    public boolean validTicTacToe(String[] board) {
   
        int ocount = 0 , xcount = 0 , xwin = 0 , owin = 0;
        for(String s : board){
   
            if(s<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值