【1】Leetcode简单题合集 python

104. 二叉树的最大深度

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root==None:
            return 0
        else:
            return max(self.maxDepth(root.left), self.maxDepth(root.right))+1

100. 相同的树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        # 以相同的方式同时遍历两棵二叉树
        # 返回false:遇到有值的节点时,如果值不相等 / 或者其中一个为空另一个不为空 

        # 先审视一下根节点
        if p==None and q==None: #同时为空是可以的
            return True
        if p==None or q==None: #一个为空,另一个不空,这不行
            return False
        if p.val!=q.val: #如果上边两种情况都没有返回,那俩都不为空,此时如果值不相等,这不行
            return False
        
        #根节点暂且满足条件(都不为空且值相等),接下来检查一下左右子树的返回情况
        left = self.isSameTree(p.left, q.left)
        right = self.isSameTree(p.right, q.right)
        # 左右必须完全一样才能返回True
        if left and right:
            return True
        else:
            return False

101. 对称二叉树

  • 上一个题是两棵树,每个树上配备一个遍历指针
  • 两个指针始终往同方向走,一旦不一样了就返回false
  • 对比一下这个题,只给了一颗树,我们可以想象拷贝出来一个完全一样的树
  • 也是用两个指针分别遍历树,只不过两个指针是往反方向走
  • 两个指针是同步进行的,所以一定是同时出现在函数中被使用(原则)
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def copyTrees(self, p, q): 
        # p指向左子树的根节点,q指向右子树的根节点
        # 刚开始root节点p、q指向相同,相当于左右重合,此时也是满足对称的
        if p==None and q==None:
            return True
        if p==None or q==None:
            return False
        if p.val!=q.val:
            return False
        
        # 根节点暂时满足条件(都不为空且值相等),接下来检查左右子树的返回情况
        p_left = self.copyTrees(p.left, q.right) # 以p的左为基准,和q的右对比
        p_right = self.copyTrees(p.right, q.left) # 以p的右为基准,和q的左对比
        if p_left and p_right:
            return True
        else:
            return False

    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        res = self.copyTrees(root, root)  # 在这个函数里实现和上题类似的过程
        return res

226. 翻转二叉树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root==None:
            return None
        # 其他只要是非空的节点,我们就等着返回交换后的左右子树
        left = self.invertTree(root.right)
        right = self.invertTree(root.left)
        root.left = left
        root.right = right
        return root

509. 斐波那契数

在这里插入图片描述

# 动态规划
class Solution:
    def fib(self, n: int) -> int:
        dp = [0] * (n+5) 
        dp[0],dp[1] = 0,1
        for i in range(2,n+1):
            dp[i] = dp[i-1]+dp[i-2]
        return dp[n]
# 递归
class Solution:
    def fib(self, n: int) -> int:
        if n==0 or n==1:
            return n
        else: 
            return self.fib(n-1)+self.fib(n-2)

118. 杨辉三角

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        dp = []
        dp.append([1])

        if numRows==1:    
            return dp

        for i in range(1, numRows): #从第二行开始
            pre = dp[i-1]
            cur = []
            cur.append(pre[0])
            for j in range(0, len(pre)-1):
                cur.append(pre[j]+pre[j+1])
            cur.append(pre[-1])
            dp.append(cur)

        return dp

674. 最长连续递增序列

  • 动态规划,dp[i] 表示以 i 结尾的当前最长递增序列长度
    在这里插入图片描述
class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        dp = [1] * len(nums) 
        maxLen = 1

        for i in range(1, len(nums)):
            if nums[i]>nums[i-1]:
                dp[i] = dp[i-1]+1
            maxLen = max(maxLen, dp[i])
        
        return maxLen

【本题进阶的类似题目可以看中等题合集中的53和300这两个题】


持续更新中……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值