【Leetcode】723. Candy Crush

解法

……基本思路就是先标记要删的,然后重新生成table
掉下来之后再次消除的方法原来就是重复一次上一轮操作啊……我还以为能有什么优化= =

class Solution:
    def candyCrush(self, board: List[List[int]]) -> List[List[int]]:
        m = len(board)
        if m==0:
            return board
        n = len(board[0])
        if n==0:
            return board
        todo = True
        while todo:
            todo = False
            for i in range(m):
                for j in range(n-2):
                    if board[i][j]!=0 and abs(board[i][j]) == abs(board[i][j+1]) == abs(board[i][j+2]):
                        board[i][j] = board[i][j+1] = board[i][j+2] = -abs(board[i][j])
                        todo = True
            for j in range(n):
                for i in range(m-2):
                    if board[i][j]!=0 and abs(board[i][j]) == abs(board[i+1][j]) == abs(board[i+2][j]):
                        board[i][j] = board[i+1][j] = board[i+2][j] = -abs(board[i][j])
                        todo = True
            for j in range(n):
                wptr = m-1
                for i in range(m-1,-1,-1):
                    if board[i][j]>0:
                        board[wptr][j] = board[i][j]
                        wptr -= 1
                for i in range(0,wptr+1):
                    board[i][j] = 0
        return board
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值