leetcode794. 有效的井字游戏python

题目描述:

 

题解:

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

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于LeetCode上的问题994.腐烂的橘子,你可以使用Python来解决。下面是一个示例代码: ```python from collections import deque def orangesRotting(grid): # 记录网格的行数和列数 row, col = len(grid), len(grid[0]) # 定义四个方向:上、下、左、右 directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 使用队列来保存腐烂的橘子的位置 queue = deque() # 记录新鲜橘子的数量 fresh_count = 0 # 遍历整个网格,初始化队列和新鲜橘子的数量 for i in range(row): for j in range(col): if grid[i][j] == 2: # 腐烂的橘子 queue.append((i, j)) elif grid[i][j] == 1: # 新鲜橘子 fresh_count += 1 # 如果新鲜橘子的数量为0,直接返回0 if fresh_count == 0: return 0 # 初始化分钟数 minutes = 0 # 开始进行BFS,直到队列为空 while queue: # 记录当前分钟数下,队列中的元素数量 size = len(queue) # 遍历当前分钟数下的所有腐烂的橘子 for _ in range(size): x, y = queue.popleft() # 遍历四个方向 for dx, dy in directions: nx, ny = x + dx, y + dy # 判断新位置是否在网格内,并且是新鲜橘子 if 0 <= nx < row and 0 <= ny < col and grid[nx][ny] == 1: # 将新鲜橘子变为腐烂状态 grid[nx][ny] = 2 # 将新鲜橘子的位置加入队列 queue.append((nx, ny)) # 新鲜橘子的数量减1 fresh_count -= 1 # 如果当前分钟数下,没有新鲜橘子了,结束循环 if fresh_count == 0: break # 每遍历完一层,分钟数加1 minutes += 1 # 如果最后还有新鲜橘子,返回-1,否则返回分钟数 return -1 if fresh_count > 0 else minutes ``` 你可以将给定的网格作为参数传递给`orangesRotting`函数来测试它。请注意,该代码使用了BFS算法来遍历橘子,并计算腐烂的分钟数。希望能对你有所帮助!如果有任何疑问,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值