题目描述
题目链接:https://leetcode-cn.com/problems/find-winner-on-a-tic-tac-toe-game/
解题思路
看到这道题,想起了昨天做的
LeetCode刷题日记-数组-面试题 840. 矩阵中的幻方
个人认为相同之处”在于 列出3*3
矩阵中的所有元素a1,b1,c1,a2,b2,c3,a3,b3,c3
,与之不同i的是,该题不是求和而是判断是否存在连续的XXX
和000
,而Python是可以直接用+
进行字符串拼接,因此本质上还是可以看作是求和。所有步骤就是一个模拟的过程。
解题代码如下
class Solution:
def tictactoe(self, moves: List[List[int]]) -> str:
# 棋盘初始化,
spots = [ ['']*3 for i in range(3)]
# A放X, B放0
for i,j in moves[::2]:
spots[i][j] = "X" # A放X
for i,j in moves[1::2]:
spots[i][j] = "0" # B放0
# 罗列出3*3矩阵中的每个元素
a1,b1,c1 = spots[0][0], spots[0][1], spots[0][2]
a2,b2,c2 = spots[1][0], spots[1][1], spots[1][2]
a3,b3,c3 = spots[2][0], spots[2][1], spots[2][2]
# 字符串拼接
row1, row2, row3 = a1+b1+c1, a2+b2+c2, a3+b3+c3
col1, col2, col3 = a1+a2+a3, b1+b2+b3, c1+c2+c3
diag1, diag2 = a1+b2+c3, c1+b2+a3
# 将八个方向的字符串拼接结果放入列表
sumlist = [row1, row2, row3, col1, col2, col3, diag1, diag2]
if "XXX" in sumlist: # 存在连续的“XXX” --》 A胜
return "A"
elif "000" in sumlist: # 存在连续的"000"” --》 B胜
return "B"
elif len(moves)<9:
return "Pending"
else:
return "Draw"