【Leetcode】723。キャンディークラッシュ



Leetcode 723 Candy Crush



......基本的な考え方は、削除するマークを付けてから、テーブルを再構築することです。
転倒後の方法ですが、再度排除されましたラウンド操作を繰り返しますああ……何が最適化できるかと思いました= =

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