题目难度: 中等
原题链接
今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~
设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。
以下是井字游戏的规则:
O(N*N)
: 需要遍历整个棋盘O(N)
: 构造了若干个长度为 N 的字符串class Solution:
def tictactoe(self, board: List[str]) -> str:
# 外层循环XO+内层4情况
n = len(board)
for char in ("X", "O"):
# 判断同一行是否全是X/O
for row in board:
if row == char * n:
return char
# 判断同一列是否全是X/O
for c in range(n):
if "".join(board[r][c] for r in range(n)) == char * n:
return char
# 判断正对角线是否全是X/O
if "".join(board[i][i] for i in range(n)) == char * n:
return char
# 判断反对角线是否全是X/O
if "".join(board[i][n - i - 1] for i in range(n)) == char * n:
return char
# 没有获胜, 检查是否存在空格
return "Pending" if any(" " in row for row in board) else "Draw"
大家可以在下面这些地方找到我~
我的 GitHub
我的 Leetcode
我的 CSDN
我的知乎专栏
我的头条号
我的牛客网博客
我的公众号: 算法精选, 欢迎大家扫码关注~