LeetCode解题 Day20

1275. Find Winner on a Tic Tac Toe Game

https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/


题目解释

请找出圈圈叉叉的赢家,题目会给你一个阵列moves,代表两个玩家游玩画下记号的过程,请回传现在的游戏状况,如果先手的玩家胜利就回传'A'、後手的玩家胜利就回传'B'、平手就回传'Draw'、还在进行中就回传'Pending'。

example

https://i.imgur.com/CJ71VFd.png


解法

圈圈叉叉的胜利条件是3个符号的连线,而连出来的线有8种: 3个行方向的线、3个列方向的线、1个对角线、1个反对角线,所以我们只要观察这6条线有没有达到胜利条件就好

再来是如何标记是哪位选手的记号,我们在九宫格标记1代表先手玩家、以-1代表後手玩家,这样出现胜利条件就是任一条线的积为3或-3

程序码

class Solution:
    def tictactoe(self, moves: List[List[int]]) -> str:
        
        rows, cols = [0] * 3, [0] * 3
        diag1 ,diag2 = 0, 0
        
        player = 1
        for i, j in moves:
            
            rows[i] += player
            cols[j] += player
            
            if i == j:
                if i == 1:
                    diag1 += player
                    diag2 += player
                else:
                    diag1 += player
            
            if abs(i-j) == 2:
                diag2 += player
            
            if rows[i] == 3 or cols[j] == 3 or diag1 == 3 or diag2 == 3:
                return 'A'
            if rows[i] == -3 or cols[j] == -3 or diag1 == -3 or diag2 == -3:
                return 'B'
            
            player *= -1
        
        return 'Pending' if len(moves) < 9 else 'Draw'

闲聊

今天是简单难度的题目,写完之後就可以自己做个小游戏了


<<:  Chapter3 - 动感DJ续篇 进一步操作阵列,让音乐嗨起来

>>:  操作Activity的一点心得

Spring Framework X Kotlin Day 24 Performance Test

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

【笔记】git新手教学

什麽是git git是一种分散式的版本控制系统,主要用来用来备份与管理程序码 版本控制 可以把它想像...

我们的基因体时代-AI, Data和生物资讯 Day07- 蛋白质结构和机器学习02:AlphaFold2 和 RoseTTAFold

上一篇我们的基因体时代-AI, Data和生物资讯 Day06-蛋白质结构和机器学习01我们继续分享...

[D11] 影像杂讯与滤波(2)

影像中的杂讯真的让人看了很不顺眼!好想把上面那些小白点、小黑点拿掉! 这时候滤波器就派上用场了~~~...

Day10-CallBack

前言 终於要开始进入JavaScript重头戏Callback。 Callback就是函式呼叫函式 ...