01 2023 档案
摘要:46. 全排列 LeetCode题目要求 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解题思路
阅读全文
摘要:491. 递增子序列 LeetCode题目要求 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。 示例 1 输入:nums = [4,6
阅读全文
摘要:90. 子集 II LeetCode题目要求 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2]
阅读全文
摘要:78. 子集 LeetCode题目要求 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2
阅读全文
摘要:93. 复原 IP 地址 LeetCode题目要求 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"
阅读全文
摘要:131. 分割回文串 LeetCode题目要求 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]] 解题思路 本
阅读全文
摘要:40. 组合总和 II LeetCode题目要求 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。
阅读全文
摘要:39. 组合总和 LeetCode题目要求 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的
阅读全文
摘要:17. 电话号码的字母组合 LeetCode题目要求 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 输入:digits = "23" 输出:["ad","ae","af",
阅读全文
摘要:216. 组合总和 III LeetCode题目要求 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 输入: k = 3, n = 7 输出: [[
阅读全文
摘要:77. 组合 LeetCode题目要求 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路
阅读全文
摘要:538. 把二叉搜索树转换为累加树 LeetCode题目要求 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子
阅读全文
摘要:108. 将有序数组转换为二叉搜索树 LeetCode题目要求 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 输入:nums = [-10,-3,
阅读全文
摘要:669. 修剪二叉搜索树 LeetCode题目要求 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。
阅读全文
摘要:450. 删除二叉搜索树中的节点 LeetCode题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找
阅读全文
摘要:701. 二叉搜索树中的插入操作 LeetCode题目要求 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效的插入方式,只要树在插入后
阅读全文
摘要:235. 二叉搜索树的最近公共祖先 LeetCode题目要求 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己
阅读全文
摘要:236. 二叉树的最近公共祖先 LeetCode题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)
阅读全文
摘要:501. 二叉搜索树中的众数 LeetCode题目要求 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义: 结点左子树中所含节点的值 小于等于 当前
阅读全文
摘要:530. 二叉搜索树的最小绝对差 LeetCode题目要求 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 输入:root = [4,2,6,1,3] 输出:1 解题思路 根据二叉搜索树的特性,最小差相当于在排
阅读全文
摘要:98. 验证二叉搜索树 LeetCode题目要求 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 输入:root
阅读全文
摘要:700. 二叉搜索树中的搜索 LeetCode题目要求 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 示例 输入:root = [4,2,7,1,3], val
阅读全文
摘要:617. 合并二叉树 LeetCode题目要求 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;
阅读全文
摘要:654. 最大二叉树 LeetCode题目要求 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。
阅读全文
摘要:106. 从中序与后序遍历序列构造二叉树 LeetCode题目要求 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 输入:inorder = [9,3,15,20,
阅读全文
摘要:112. 路径总和 LeetCode题目要求 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有
阅读全文
摘要:513. 找树左下角的值 LeetCode题目要求 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 解题思路 本题要找的是最后一层最左边节点的值,那
阅读全文
摘要:404. 左叶子之和 LeetCode题目要求 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解题思路 本题主要是要找到左叶子
阅读全文
摘要:257. 二叉树的所有路径 LeetCode题目要求 给你一个二叉树的根节点 root ,按任意顺序,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"] 解题思路 由于要求输出的从根
阅读全文
摘要:110. 平衡二叉树 LeetCode题目要求 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 输入:root = [3,9,20,null,null,15,7] 输出:true 解题思路 本
阅读全文
摘要:222. 完全二叉树的节点个数 LeetCode题目要求 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包
阅读全文
摘要:111. 二叉树的最小深度 LeetCode题目要求 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 输入:root = [3,9,20,null,null,15,7] 输出:2 解题思路 与求最大深度不同的是,
阅读全文
摘要:104. 二叉树的最大深度 LeetCode题目要求 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 解题思路 要了解二叉
阅读全文
摘要:101. 对称二叉树 LeetCode题目要求 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 输入:root = [1,2,2,3,4,4,3] 输出:true 解题思路 通过分别遍历左右两个子树,并对比左右子树的左右子节点是否对称相等,也就是要比较的是左树的左节点与右树的右节点,
阅读全文
摘要:226. 翻转二叉树 LeetCode题目要求 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点 示例 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解题思路 基本思路就是不断交换左右子节点,就可以完成反转操作了。 如下图: 上代码,递归
阅读全文
摘要:102. 二叉树的层序遍历 LeetCode题目要求 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 解题思路 层序遍历,就是从
阅读全文
摘要:144. 二叉树的前序遍历 LeetCode题目要求 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 输入:root = [1,null,2,3] 输出:[1,2,3] 解题思路 最重要的要明白什么是二叉树的前序遍历:即从中间节点开始到左节点再到右节点的遍历过程,可简称为【中左右
阅读全文
摘要:239. 滑动窗口最大值 LeetCode题目要求 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 输入:nums = [1,3,-1,-3,5,3,6
阅读全文
摘要:150. 逆波兰表达式求值 LeetCode题目要求 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 '+'、'-'、'*' 和 '/' 。 每个操作数(运算对象)都可以是一个整数或者另一个表达
阅读全文
摘要:1047. 删除字符串中的所有相邻重复项 LeetCode题目要求 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例 输入:"abbaca"
阅读全文
摘要:20. 有效的括号 LeetCode题目要求 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 输入:s = "
阅读全文
摘要:225. 用队列实现栈 LeetCode题目要求 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素
阅读全文
摘要:232. 用栈实现队列 LeetCode题目要求 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素
阅读全文
摘要:剑指 Offer 58 - II. 左旋转字符串 LeetCode题目要求 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 输入: s =
阅读全文
摘要:151. 反转字符串中的单词 LeetCode题目要求 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空
阅读全文
摘要:剑指 Offer 05. 替换空格 LeetCode题目要求 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 输入:s = "We are happy." 输出:"We%20are%20happy." 解题思路 借助一个额外 StringBuilder 空间,遍历字符数组,比较简
阅读全文
摘要:541. 反转字符串 II LeetCode题目要求 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符
阅读全文
摘要:344. 反转字符串 LeetCode题目要求 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 输入:s = ["h","e","l","l","o"] 输出
阅读全文
摘要:18. 四数之和 LeetCode题目要求 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0
阅读全文
摘要:15. 三数之和 LeetCode题目要求 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和
阅读全文
摘要:383. 赎金信 LeetCode题目要求 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用
阅读全文
摘要:454.四数相加II LeetCode题目要求 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k, l < n nums1[i] + nums2[j] + nums3[k]
阅读全文
摘要:1. 两数之和 LeetCode题目要求 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
阅读全文
摘要:第202题. 快乐数 LeetCode题目要求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐
阅读全文
摘要:349. 两个数组的交集 LeetCode题目要求 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 解题思路 本题借
阅读全文
摘要:242.有效的字母异位词 LeetCode题目要求 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输
阅读全文
摘要:142.环形链表II LeetCode题目要求 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接
阅读全文
摘要:面试题 02.07. 链表相交 LeetCode题目要求 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表
阅读全文
摘要:19.删除链表的倒数第N个节点 LeetCode题目要求 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 解题思路 根据题目要求,如删除倒数第二个节点,即是把 4 删除掉,那么原来 4 的
阅读全文