leetcode794. 有效的井字游戏python

本文介绍了一个用于解决经典游戏 Tic Tac Toe 的解决方案,通过维护游戏状态矩阵,检查玩家数量平衡并分析行、列及对角线得分,判断X和O的胜利条件。

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

题目描述:

 

题解:

1.利用state 一个3*3的数组记录输入board的状态,如果board对应位置为X则将state对应位置设为1,如果是O则将state对应位置设为0,利用xnum onum记录board中X和O数量。

2.如果onum>xnum 或xnum onum之差大于1,则返回False(因为两个玩家总是交替下棋,并且玩家1先下)

3.分别计算state每行,每列,两个对角线位置的值之和,如果和为3,flag1+1,如果为0,flag2+1,flag1 2分别对应x玩家和o玩家获胜的情况。

4.如果x获胜,flag1>flag2,则x的数量应该比o多1.

5.如果o获胜,flag2>flag2,则o的数量应该和x相等。

class Solution:
    def validTicTacToe(self, board: List[str]) -> bool:
        state = [[100 for i in range(3)] for j in range(3)]
        xnum = 0
        onum = 0
        for i in range(3):
            line = board[i]
            linestate = []
            for s in line:
                if s == 'X':
                    xnum = xnum + 1
                    linestate.append(1)
                if s == 'O':
                    onum = onum + 1
                    linestate.append(0)
                if s == ' ':
                    linestate.append(100)
            state[i] = linestate
        print(state)
        if onum > xnum:
            return False
        if abs(onum - xnum) > 1:
            return False
        flag1 = 0
        flag2 = 0
        for i in range(3):
            diagonal1 = 0
            diagonal2 = 0
            if sum(state[i]) == 3:
                flag1 = flag1 + 1
            if sum(state[i]) == 0:
                print("here")
                flag2 = flag2 + 1
            diagonal1 = state[0][0] + state[1][1] + state[2][2]
            diagonal2 = state[0][2] + state[1][1] + state[2][0]
        for j in range(3):
            if sum(s[j] for s in state) == 3:
                flag1 = flag1 + 1
            if sum(s[j] for s in state) == 0:
                print("here")
                flag2 = flag2 + 1
        if diagonal1 == 3 or diagonal2 == 3:
            print("here")
            flag1 = flag1 + 1
        if diagonal1 == 0 or diagonal2 == 0:
            print("here")
            flag2 = flag2 + 1
        print(flag1)
        print(flag2)
        if flag2 == flag1 and flag1 != 0:
            return False
        if flag1 > flag2:
            if xnum - onum == 1:
                return True
            else:
                return False
        if flag2 > flag1:
            if onum >= xnum:
                return True
            else:
                return False
        return True

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值