LeetCode #1275. Find Winner on a Tic Tac Toe Game
题目
1275. Find Winner on a Tic Tac Toe Game
解题方法
初始化一个字典dic,用来记录某个玩家走的位置,并用两个计数器totalmoves和movecount记录总步数和当前玩家步数,先遍历数组中偶数下标位置(0、2、4...),如果当前步数达到3步以上,则开始判断是否获胜。如果A没有获胜,重置字典和movecount,再判断B,如果B也没有获胜,则判断总步数是否达到上限9,如果没有就是pending,有就是draw。
判断获胜的方法是判断当前列或行,或两条对角线上的点是否都在字典中,满足一个就获胜了。
时间复杂度:O(n)
空间复杂度:O(n)
代码
class Solution:
def tictactoe(self, moves: List[List[int]]) -> str:
dic = {}
totalmoves = 0
movecount = 0
for move in range(0, len(moves), 2):
dic[tuple(moves[move])] = "A"
movecount += 1
if movecount > 2:
i, j = moves[move][0], moves[move][1]
if ((i+1)%3, j) in dic and ((i+2)%3, j) in dic \
or (i, (j+1)%3) in dic and (i, (j+2)%3) in dic \
or (0, 0) in dic and (1, 1) in dic and (2, 2) in dic \
or (0, 2) in dic and (1, 1) in dic and (2, 0) in dic:
return dic[tuple(moves[move])]
dic.clear()
totalmoves += movecount
movecount = 0
for move in range(1, len(moves), 2):
dic[tuple(moves[move])] = "B"
movecount += 1
if movecount > 2:
i, j = moves[move][0], moves[move][1]
if ((i+1)%3, j) in dic and ((i+2)%3, j) in dic \
or (i, (j+1)%3) in dic and (i, (j+2)%3) in dic \
or (0, 0) in dic and (1, 1) in dic and (2, 2) in dic \
or (0, 2) in dic and (1, 1) in dic and (2, 0) in dic:
return dic[tuple(moves[move])]
totalmoves += movecount
if totalmoves == 9:
return "Draw"
else:
return "Pending"

浙公网安备 33010602011771号