leetcode 794. 有效的井字游戏【数组+思维】

这篇博客探讨了如何用Python实现一个井字游戏(Tic-Tac-Toe)的获胜条件检查器。代码中定义了一个函数`judge`来计算X和O的连串数量,并通过检查X和O的步数来判断游戏是否有效。当O走最后一步且X没有形成三连串,或者X走最后一步且O没有形成三连串,同时X的连串数量不超过2时,返回游戏有效。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:
计算正确的可能情况。

第一种:O 走最后一步,X和O的个数相等,X则没有形成三连串, O可能形成0~2条三连串。

第二种:X 走最后一步,X个数比O多1,O则没有形成三连串,X可能形成0~2条三连串。

code:

class Solution:
    def validTicTacToe(self, board: List[str]) -> bool:
        def judge(board, ch):
            cnt = 0
            for i in range(3):
                if board[i] == ch * 3:
                    cnt += 1
            for j in range(3):
                s = ''
                for i in range(3):
                    s += board[i][j]
                if s == ch * 3:
                    cnt += 1
            if board[1][1] == ch and board[0][0] == ch and board[2][2] == ch:
                cnt += 1
            if board[1][1] == ch and board[0][2] == ch and board[2][0] == ch:
                cnt += 1
            return cnt

        x, o = 0, 0
        for row in board:
            for ch in row:
                if ch == 'X':
                    x += 1
                if ch == 'O':
                    o += 1
        if x == o: # O 走最后一步
            if judge(board, 'X') == 0 and judge(board, 'O') <= 2:
                return True
        if x == o + 1: # X 走最后一步
            if judge(board, 'O') == 0 and judge(board, 'X') <= 2:
                return True
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值