自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zjw_python的博客

人生苦短,我用Python

  • 博客(50)
  • 问答 (6)
  • 收藏
  • 关注

原创 120. 三角形最小路径和(JS实现)

1 题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。2 思路这道题的主要思路用一个数组

2020-06-29 22:29:38 1522

原创 117. 填充每个节点的下一个右侧节点指针 II(JS实现)

1 题目给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。示例:输入:root = [1,2,3,4,5,null,7]

2020-06-29 22:20:58 1380

原创 116. 填充每个节点的下一个右侧节点指针(JS实现)

1 题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{“KaTeX parse error: Expected '}', got 'EOF'

2020-06-29 22:18:21 1369

原创 114. 二叉树展开为链表(JS实现)

1 题目给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树1/ 2 5/ \ 3 4 6将其展开为:1234562 思路这道题我的思路比较直接,首先前序遍历树,然后用next指针链接每个节点,随后修改原来right指针,题解的方法比较巧妙,对树进行变形的后序遍历,遍历顺序是右子树->左子树->根节点例如,我们依次遍历 6 5 4 3 2 1,然后每遍历一个节点就将当前节点的右指针更新为上一个节点,6 <- 5 <

2020-06-29 22:12:25 1588

原创 112. 路径总和(JS实现)

1 题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,5/ 4 8/ / 11 13 4/ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。2 思路这道题的主要思路是使用递归的方法将从根节点到达每个叶子节点的路径和

2020-06-29 22:04:39 845

原创 110. 平衡二叉树(JS实现)

1 题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ 2 2/ 3 3/ 4 4返回 false 。2 思路这道题主要思路从底向上遍历,每次节点深度加1,判断

2020-06-29 21:58:56 567

原创 109. 有序链表转换二叉搜索树(JS实现)

1 题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 52 思路这道题我是将链表转换为数组,然后再用递归的方法来划分数组构造二叉树的,题解有更巧妙的中序遍历递归

2020-06-29 21:54:34 457

原创 108. 将有序数组转换为二叉搜索树(JS实现)

1 题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 52 思路这道题的主要思路是首先找到数组的中点,中点极为根节点,然后中点两侧的子数组就为左右子树,随后利用继续对左右两边进行划分,递归进行

2020-06-29 21:48:02 2099

原创 106. 从中序与后序遍历序列构造二叉树(JS实现)

1 题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ 9 20/ 15 72 思路这道题的主要思路跟从中序和前序序列构造二叉树,只不过前序换成了后序,我们就需要先构造右子树,再构造左子树3代码/** * Definition for a binary tree node. * fu

2020-06-29 21:44:15 401

原创 105. 从前序与中序遍历序列构造二叉树(JS实现)

1 题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 72 思路这道题的主要思路是使用递归的方法来构造整个树,首先前序遍历中,第一个节点是根节点,我们就可以将中序遍历数组划分为两个子数组,分别对应根节点的左右子树。然后针对左子树,前序遍历的第二个节点即为左子树的根节点,我们

2020-06-21 16:26:26 1252

原创 102. 二叉树的层序遍历(JS实现)

1 题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]2 思路这道题的主要思路是用队列来进行层序遍历,由于需要区分每一层,因此额外使用一个数组来存储下一层的节点3代码/** * Definition for a binary tree node. * function

2020-06-21 15:24:36 4178

原创 101. 对称二叉树(JS实现)

1 题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 32 思路这道题可以用递归来解决,若有两个节点p和q相等,那么就检查p节点的左孩子和q节点的右孩子、p节点的右孩子和q节点的左孩子是不是都相等,就这样递归下去3代码/** * Definition for a b

2020-06-20 18:00:57 968

原创 98. 验证二叉搜索树(JS实现)

1 题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。2 思路二叉搜索树的中序遍历是一个有序

2020-06-20 17:05:57 1212

原创 96. 不同的二叉搜索树 (JS实现)

1 题目给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2/ / \ 2 1 2 32

2020-06-20 16:08:14 917

原创 95. 不同的二叉搜索树 II(JS实现)

1 题目给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3

2020-06-20 15:34:46 550

原创 93. 复原IP地址(JS实现)

1 题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]2 思路这道题思路主要是考察回溯和剪枝,逐步构造一棵树, 树的每层都对应ip地址的每一段,最好能到达叶子节点的路径就是符合的结果3代码/** * @param {string} s * @

2020-06-20 11:54:57 907 1

原创 92. 反转链表 II(JS实现)

1 题目反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL2 思路这道题思路主要是考察指针,并不是很难,只需要先找到要翻转元素的头和尾,然后头尾互换,并将其与原列表连接在一起,最后再翻转内部的元素即可3代码/** * Definition for sin

2020-06-20 11:11:47 530

原创 91. 解码方法(JS实现)

1 题目一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。2 思路这道题思路主要是考察动态规划,设d[i

2020-06-19 19:41:02 692

原创 86. 分隔链表(JS实现)

1 题目给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->52 思路这道题思路主要是新建两个列表,将大于或等于目标的元素、以及小于目标的元素分开,然后再将两个列表连接起来3代码/** * Definition for s

2020-06-18 20:09:06 503

原创 88. 合并两个有序数组(JS实现)

1 题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]2 思路这道题思路主

2020-06-18 20:00:12 857

原创 82. 删除排序链表中的重复元素 II(JS实现)

1 题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->32 思路这道题的思路主要思路还是双指针,prev指针上一个元素,head指针遍历每个元素,当prev和head指向的元素值不同时,两者同时向后移动,当prev和head指向的元素值

2020-06-17 19:45:52 606

原创 81. 搜索旋转排序数组 II(JS实现)

1 题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: false2 思路这道题思路还是主要判断m

2020-06-16 21:16:48 635

原创 80. 删除排序数组中的重复项 II(JS实现)

1 题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,1,2,3,3],函数应返回新长度 le

2020-06-15 22:14:45 693

原创 79. 单词搜索(JS实现)

1 题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 fals

2020-06-14 21:23:28 901

原创 77. 组合(JS实现)

1 题目给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]2 思路这道题的思路主要深度优先构造一棵树,由于生成的组合无关顺序,因此每层循环的初始值都是父节点的值+13代码/** * @param {number} n * @param {number} k * @return {number[][]} */var com

2020-06-14 13:20:42 1144

原创 74. 搜索二维矩阵(JS实现)

1 题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 5

2020-06-14 10:47:52 740

原创 73. 矩阵置零(JS实现)

1 题目给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]进阶:一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个

2020-06-13 17:38:46 804

原创 71. 简化路径(JS实现)

1 题目以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

2020-06-13 16:41:16 877

原创 69. x 的平方根(JS实现)

1 题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。2 思路这道题思路很简单,就是遍历所有整数,来找到目标,但由于自然整数是有序的,因此可以用二分法来加快速度3代码/** * @param {number} x * @retu

2020-06-13 16:15:11 675

原创 64. 最小路径和(JS实现)

1 题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。2 思路这道题还是用动态规划来做,首先初始化第一行和第一列,然后状态转移方程d[i][j] = Math.min(d[i-1][j], d[i][j-1]) + num[i][j], d[i][j]为第i行第j列

2020-06-13 14:57:17 809

原创 63. 不同路径 II(JS实现)

1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角到

2020-06-13 14:07:09 513

原创 62. 不同路径(JS实现)

1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1 向右 -> 向右 -> 向下2 向右 -> 向下 -> 向右3 向下 -> 向右 -> 向右示例 2:输入: m =

2020-06-13 13:04:13 684

原创 61. 旋转链表(JS实现)

1 题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-

2020-06-13 12:05:49 527

原创 60. 第k个排列(JS实现)

1 题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: “213”示例 2:输入: n = 4, k = 9输出: “2314”2 思路这道题刚开始时直

2020-06-13 11:34:42 498

原创 59. 螺旋矩阵 II(JS实现)

1 题目给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]2 思路这道题就比54那道螺旋矩阵简单很多,因为行列都是一样的大小,注意行列数为奇数的时候,矩阵中间那个数要最后推入3代码/** * @param {number} n * @return {number[][]} */var generateMatrix = funct

2020-06-11 22:44:03 581

原创 56. 合并区间(JS实现)

1 题目给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。2 思路这道题很简单,差不多10分钟就一次AC了,主要思路就是先将区间排序,然后逐个遍历进行区间合并3代码

2020-06-11 22:05:37 1607

原创 55. 跳跃游戏(JS实现)

1 题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。2 思路

2020-06-11 21:46:07 1283

原创 54. 螺旋矩阵(JS实现)

1 题目给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]2 思路这道题做了好久,老是有各种边界问题,最后终于做出来了,

2020-06-09 23:28:17 716

原创 53. 最大子序和(JS实现)

1 题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。2 思路这道题利用动态规划的方法,假设以i为结尾的子串最大值为f(i),那么状态转移方程f(i+1) = max(f(i) + nums[i+1], nums[i+1])

2020-06-07 18:28:15 767

原创 50. Pow(x, n)(JS实现)

1 题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 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 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。2 思路这道题利用递归实现快速幕的计

2020-06-07 17:28:59 776

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除