题目描述:
LeetCode 794. Valid Tic-Tac-Toe State
A Tic-Tac-Toe board is given as a string array board
. Return True if and only if it is possible to reach this board position during the course of a valid tic-tac-toe game.
The board
is a 3 x 3 array, and consists of characters " "
, "X"
, and "O"
. The " " character represents an empty square.
Here are the rules of Tic-Tac-Toe:
- Players take turns placing characters into empty squares (" ").
- The first player always places "X" characters, while the second player always places "O" characters.
- "X" and "O" characters are always placed into empty squares, never filled ones.
- The game ends when there are 3 of the same (non-empty) character filling any row, column, or diagonal.
- The game also ends if all squares are non-empty.
- No more moves can be played if the game is over.
Example 1: Input: board = ["O ", " ", " "] Output: false Explanation: The first player always plays "X". Example 2: Input: board = ["XOX", " X ", " "] Output: false Explanation: Players take turns making moves. Example 3: Input: board = ["XXX", " ", "OOO"] Output: false Example 4: Input: board = ["XOX", "O O", "XOX"] Output: true
Note:
board
is a length-3 array of strings, where each stringboard[i]
has length 3.- Each
board[i][j]
is a character in the set{" ", "X", "O"}
.
题目大意:
给定一个井字棋的棋盘,判断棋盘状态是否合法。
'X'先'O'后,当三子连珠时(横、竖、对角线)游戏结束。
解题思路:
计算棋盘上'X'和'O'的个数,记为nx, no
分别判断'X'和'O'是否存在三子连珠,记为wx, wo
若wx为真,则nx == no + 1并且wo为假 若wo为真,则nx == no 否则,nx - 1 <= no <= nx
Python代码:
class Solution(object):
def validTicTacToe(self, board):
"""
:type board: List[str]
:rtype: bool
"""
nx = ''.join(board).count('X')
no = ''.join(board).count('O')
wx, wo = self.isWin(board, 'X'), self.isWin(board, 'O')
if wx: return nx == no + 1 and not wo
if wo: return nx == no
return nx - 1 <= no <= nx
def isWin(self, board, pc):
if any(r == pc * 3 for r in board): return True
if any(c == pc * 3 for c in zip(*board)): return True
if board[0][0] == board[1][1] == board[2][2] == pc: return True
if board[0][2] == board[1][1] == board[2][0] == pc: return True
return False
本文链接:http://bookshadow.com/weblog/2018/03/04/leetcode-valid-tic-tac-toe-state/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。