
LeetCode
无风而起
这个作者很懒,什么都没留下…
展开
-
LeetCode剑指offer——复杂链表的复制、二叉搜索树与双向链表
复杂链表的复制请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。提示:-10000 <= Node.val <= 10000Node.random 为空(null)或指向链表中的节点。节点数目不超过 1000 。代码:class Solution: def copyRandomList(self, head: 'Node') ->原创 2020-11-25 09:19:05 · 225 阅读 · 0 评论 -
LeetCode 剑指offer——二叉搜索树的后序遍历序列、二叉树中和为某一值的路径
二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例1:输入: [1,6,3,2,5]输出: false示例2:输入: [1,3,2,6,5]输出: true代码:class Solution: def verifyPostorder(self, post原创 2020-11-13 19:51:47 · 147 阅读 · 0 评论 -
LeetCode 剑指offer——从上到下打印二叉树 II、从上到下打印二叉树 III
从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]代码:class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]:原创 2020-10-24 09:24:44 · 169 阅读 · 0 评论 -
LeetCode 剑指offer——栈的压入、弹出序列和从上到下打印二叉树
栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3)原创 2020-10-23 20:36:07 · 173 阅读 · 1 评论 -
LeetCode 剑指Offer——顺时针打印矩阵、包含min函数的栈
顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length <原创 2020-10-21 14:15:47 · 125 阅读 · 0 评论 -
LeetCode 剑指Offer——二叉树的镜像、 对称的二叉树
二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000代码:class Solution: def m原创 2020-10-18 12:35:51 · 227 阅读 · 0 评论 -
LeetCode 剑指 Offer——合并两个排序的链表、树的子结构
合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4代码:class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: cur = dum = ListNode(0) whil原创 2020-10-12 09:20:29 · 148 阅读 · 0 评论 -
LeetCode 剑指 Offer——链表中倒数第K个节点、反转链表
链表中倒数第K个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.代码:class Solution: def getKthFromEnd(self, head: ListNode,原创 2020-10-10 10:04:46 · 241 阅读 · 0 评论 -
LeetCode 剑指 Offer——表示数值的字符串、调整数组顺序使奇数位于偶数前面
表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。本题关键是了解判断数值的规则:1、数字分5个部分,正负号、数字、小数点、小数、指数(包括e、可选的正负号、整数)2、正负号存在则其后必须跟数字或小数点3、小数点前或后必须有数字4、指数符号e前必须有数字5、字符串前后的空格不影原创 2020-10-08 11:08:44 · 220 阅读 · 0 评论 -
LeetCode 剑指 Offer——数值的整数次方、打印从1到最大的n位数
数值的整数次方实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 3原创 2020-10-02 13:32:53 · 264 阅读 · 1 评论 -
LeetCode 剑指 Offer——剪绳子2、二进制中1的个数
剪绳子2给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例1:输入: 2输出: 1解释: 2 = 1 + 1, 1 ×原创 2020-10-01 08:56:57 · 192 阅读 · 0 评论 -
LeetCode 剑指 Offer——删除链表中的节点、正则表达式匹配
删除链表中的节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为原创 2020-10-07 13:20:52 · 137 阅读 · 0 评论 -
LeetCode 剑指 Offer——机器人的运动范围、剪绳子
机器人的运动范围地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例1:输入:m = 2, n = 3, k = 1输出:3示例2:输入:原创 2020-09-28 12:59:16 · 153 阅读 · 0 评论 -
LeetCode 剑指 Offer——旋转数组的最小数字、矩阵中的路径
旋转数组中的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例1:输入:[3,4,5,1,2]输出:1示例2:输入:[2,2,2,0,1]输出:0代码:def minArray(self, numbers: List[int]) -> int: i, j = 0, len(numbers)-1原创 2020-09-26 10:35:08 · 138 阅读 · 0 评论 -
LeetCode 剑指 Offer——斐波那契数列、青蛙跳台阶问题
斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例1:输入:n = 2输出:1示例2:输入:n = 5输出:5限制:原创 2020-09-25 13:33:35 · 256 阅读 · 0 评论 -
LeetCode 剑指 Offer——重建二叉树、用两个栈实现队列
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000代码:def buildTree(self, preorder: List[int], in原创 2020-09-24 10:03:52 · 260 阅读 · 0 评论 -
LeetCode 剑指 Offer——替换空格、从尾到头打印链表
替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000代码:def replaceSpace(self, s: str)->str: res = [] for c in s: if c == ' ': res.append("%20") else: res.append(c) return "".join原创 2020-09-23 10:15:09 · 210 阅读 · 0 评论 -
LeetCode 剑指 Offer——数组中的重复数字、二维数组中的查找
数组中的重复数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 代码:def findRepeatNumber(self, nums: List[int]) -> int: tmp = {} for x in nums: if x in tmp:原创 2020-09-22 14:49:55 · 228 阅读 · 0 评论