一天两道力扣(3)
解法一:
class Solution(object):def invertTree(self, root):if not root:return Noneroot.left, root.right = root.right, root.leftself.invertTree(root.right)self.invertTree(root.left)return root
解析:递归
解法二:
class Solution(object):def invertTree(self, root):if not root:return Nonequeue = [root]while queue:tmp = queue.pop(0)tmp.left, tmp.right = tmp.right, tmp.leftif tmp.left:queue.append(tmp.left)if tmp.right:queue.append(tmp.right)return root
解析:从上往下依次将当下根节点放入队列中,然后交换其左右节点
class Solution(object):def maximalSquare(self, matrix):m, n = len(matrix), len(matrix[0])dp = [[0] * (n +1) for _ in range(m + 1)]ans = 0for 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]) + 1if 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