Leetcode 810 Solution

This article provides solution to leetcode question 810 (valid-tic-tac-toe-state)

https://leetcode.com/problems/valid-tic-tac-toe-state

Solution

class Solution: def getWins(self, ch, board): wins = 0
for i in range(3): if board[i][0] == ch and board[i][1] == ch and board[i][2] == ch: wins += 1
for j in range(3): if board[0][j] == ch and board[1][j] == ch and board[2][j] == ch: wins += 1
if board[0][0] == ch and board[1][1] == ch and board[2][2] == ch: wins += 1
if board[2][0] == ch and board[1][1] == ch and board[0][2] == ch: wins += 1
return wins
def isValid(self, ch, board): valid = False
for i in range(3): for j in range(3): old_str = board[i] board[i] = board[i][:j - 1] + ' ' + board[i][j:]
if self.getWins(ch, board) == 0: valid = True
board[i] = old_str
return valid
def validTicTacToe(self, board: List[str]) -> bool: cnt1 = 0 cnt2 = 0
for i in range(3): for j in range(3): if board[i][j] == 'X': cnt1 += 1 elif board[i][j] == 'O': cnt2 += 1
wins1 = self.getWins('X', board) wins2 = self.getWins('O', board)
if wins1 > 1: return self.isValid('X', board) and cnt1 == cnt2 + 1 and wins2 == 0 elif wins1 == 1: return wins2 == 0 and cnt1 == cnt2 + 1 else: if wins2 == 0 and (cnt1 == cnt2 or cnt1 == cnt2 + 1): return True elif wins2 == 1 and cnt1 == cnt2: return True else: return self.isValid('O', board) and cnt1 == cnt2