![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
huahuahuahhhh
一步一步,慢慢来
展开
-
剑指 Offer 57 - II. 和为s的连续正数序列
题目 我的解法 题目要求返回的是连续的子列和。根据子列的长度k,可以确定子列的中间值mid。判断mid前k/2到后k/2个数的和是否为target,决定该子列是否加入到result中. 子序列的长度k最大为target//2 子序列的长度k为奇数,子序列的起始分别为mid - k//2 ,mid + k//2+1 子序列的长度k为偶数,子序列的起始分别为mid - k//2 + 1,mid + k//2+1 class Solution: def findContinuousSequence(原创 2021-05-11 18:31:10 · 105 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
题目 我的方法 思路 用栈的方法遍历二叉树。 每次遍历一个数,将它的值加在temp中,同时判断sum(temp)==target是否成立,再看该节点是否是叶子节点,如果二者都成立,则将temp加入到路径结果中 每次遍历完一个节点的子树后,将该节点从栈中弹出的同时,也将节点的值从temp中弹出 主要是在前序遍历的基础上改的。不能用简易版的前序遍历,根节点比右孩子提前弹出,导致路径不完整,结果不正确。 temp成立时,不能直接用result.append(temp),后面temp改动,result也会跟着原创 2021-04-28 17:47:57 · 103 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
题目 剑指offer的解题思路 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上。 打印每一圈的起点(startX,startY)分别为(0,0),(1,1)… 起点的横坐标与纵坐标相同,没打印完一圈后+1. 打印的退出条件是startX2>=columns 或 startX2>=rows. 不是每一打印都能打印完整的一圈的。情况如下: class Solution: def spiralOrder(self, matrix):原创 2021-04-28 17:19:14 · 113 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
题目 题目给出,空树不是任意数的子结构。递归的时候这是一个出口条件。 大致思路: 前序遍历树A,判断以当前遍历的节点形成的子树是否包含树B 判断A左子树是否包含树B 判断A右子树是否包含树B recur判断A树以当前节点为根节点的树是否包含树B class Solution: def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool: def recur(A,B): if not B:原创 2021-04-27 15:51:58 · 86 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
题目 我的解法 遍历链表时,通过栈,存取每个节点。遍历完后,将栈中的节点一次弹出 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode:原创 2021-04-26 16:34:29 · 94 阅读 · 0 评论 -
连续子数组的最大和
题目 方法一 通过连个变量分别记录遍历到当前元素的最大值及整个数组的最大值 数组可能为全是负数,最小的元素在数组中间 我的解法 class Solution: def maxSubArray(self, nums) -> int: temp_sum = 0 max_sum = nums[0] for i in nums: if temp_sum + i > 0: temp_sum原创 2021-04-23 19:05:39 · 106 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
我的解法: 很直接 先遍历一次链表,得到链表的长度。新建变量指向头部,不能动head指针 返回n-k的位置 参考解法 3. 定义两个指针former,latter分别指向链表的头部 4. former指针向后移动k步 5. fomer 和 latter 同时向后移动,当former移到尾部时,返回latter,即为倒数第K个节点 示例: 数组:[1, 2, 3, 4, 5, 6, 7], k=2 6. 定义两个指针former,latter分别指向链表的头部 7. former 向后移动k步,指向3..原创 2020-12-10 14:34:35 · 120 阅读 · 1 评论