一天两道力扣(3)

一天两道力扣(3)_第1张图片

解法一:

class Solution(object):
    def invertTree(self, root):
        if not root:
            return None
        root.left, root.right = root.right, root.left
        self.invertTree(root.right)
        self.invertTree(root.left)
        return root
        

解析:递归

解法二:

class Solution(object):
    def invertTree(self, root):
        if not root:
            return None
        queue = [root]
        while queue:
            tmp = queue.pop(0)
            tmp.left, tmp.right = tmp.right, tmp.left
            if tmp.left:
                queue.append(tmp.left)
            if tmp.right:
                queue.append(tmp.right)
        return root

解析:从上往下依次将当下根节点放入队列中,然后交换其左右节点 

一天两道力扣(3)_第2张图片

class Solution(object):
    def maximalSquare(self, matrix):
        m, n = len(matrix), len(matrix[0])
        dp = [[0] * (n +1) for _ in range(m + 1)]
        ans = 0
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == "1":
                    dp[i + 1][j +1] = min(dp[i][j], dp[i + 1][j], dp[i][j + 1]) + 1
                    if dp[i + 1][j +1] > ans:
                        ans = dp[i + 1][j +1]
        return ans ** 2

解析:典型动态规划,状态转移公式dp[i+1][j+1]=min(dp[i][j],dp[i+1][j],dp[i][j+1])+1

 

 

你可能感兴趣的:(leetcode,leetcode,算法)