2022跟着leedcode学数据结构--第39天

99 阅读1分钟

「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战

image.png

[剑指 Offer 28. 对称的二叉树]

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

image.png

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    image.png  

示例 1:

输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2:

输入:root = [1,2,2,null,3,null,3] 输出:false  

限制:

0 <= 节点个数 <= 1000

解题思路:

  • 碰到这样的题,第一步还是要判断是否为空,为空返回True
  • 编写辅助函数 _dfs 方法,判断内容是否都为空或者left.val!=right.val方法
  • 通过以上判断确定是否一致,一致则返回True,否则False
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if not root:
            return True
        return self._dfs(root.left,root.right)
       
    # 辅助函数dfs方法
    def _dfs(self,left,right):
        if not left and not right:
            return True
        if not left or not right or left.val != right.val:
            return False
        return self._dfs(left.left, right.right) and self._dfs(left.right, right.left)

执行结果:

image.png

[剑指 Offer 10- I. 斐波那契数列]

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1

F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

  • 输入:n = 2

  • 输出:1

  • 示例 2:

  • 输入:n = 5

  • 输出:5

提示:

0 <= n <= 100

解题思路:

- 斐波那契数列 这个题做了很多遍了,我们根据题意进行编程即可
- 判断 0 和 1 的特殊情况
- 遍历然后通过存储值到res中
- 取res中最后一个参数即使我们想要的值
- 当然要看好题意,**题中还明确写了需要取模  这里我在第一遍写的时候忽略了,总是失败,这里大家要注意好。**
class Solution:
    def fib(self, n: int) -> int:
        if n==0:
            return 0
        res=[0]
        if n==1:
            return 1
        res.append(1)
        for row in range(2,n+1):
            res.append(res[row-1]+res[row-2])
        return res[-1]%  1000000007

执行结果:

image.png