794.有效的井字游戏
class Solution:
def validTicTacToe(self, board) -> bool:
x, o = 0, 0
#统计X和O的个数
for i in range(3):
for j in range(3):
c = board[i][j]
if c == 'X':
x += 1
elif c == 'O':
o += 1
# 辅助函数,判断某行或某列或对角线有无三连相同
def check(c):
for i in range(3):
# 某行相同
if board[i][0] == c and board[i][1] == c and board[i][2] == c:
return True
# 某列相同
if board[0][i] == c and board[1][i] == c and board[2][i] == c :
return True
a = True
b = True
for i in range(3):
for j in range(3):
if i == j:
a &= (board[i][j] == c) #检测主对角线是否相同
if i + j == 2:
b &= (board[i][j] == c) #检测副对角线是否相同
return a or b
# 检测X和O是否连成线
a = check('X')
b = check('O')
# 分情况讨论
if o > x or x - o > 1:
return False
if a and x <= o: # 若X获胜
return False
if b and x != o: # 若O获胜
return False
if a and b:
return False
return True #其余情况true最后更新于