LC 437. 路径总和 III 题目描述这是 LeetCode 上的 437. 路径总和 III ,难度为 中等。 给定一个二叉树的根节点 root ,和一个整数 targetSum,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 示例 1:12345输入:root = [10,5,-3,3,2,null,1 2021-09-27 前缀和 DFS 树的遍历
LC 639. 解码方法 II 题目描述这是 LeetCode 上的 639. 解码方法 II ,难度为 困难。 一条包含字母 A-Z 的消息通过以下的方式进行了编码:1234'A' -> 1'B' -> 2...'Z' -> 26要 解码 一条已编码的消息,所有的数字都必须分组,然后按原来的编码方案反向映射回字母(可能存在多种方式)。例如,”1110 2021-09-26 枚举 线性 DP
LC 371. 两整数之和 题目描述这是 LeetCode 上的 371. 两整数之和 ,难度为 中等。 给你两个整数 a 和 b ,不使用 运算符 + 和 -,计算并返回两整数之和。 示例 1:123输入:a = 1, b = 2输出:3示例 2:123输入:a = 2, b = 3输出:5 提示: -1000 <= a, b <= 1000 位运算一个朴素的做法是使用「位运算」,利用二进制的「逢二进一」 2021-09-25 位运算
LC 583. 两个字符串的删除操作 题目描述这是 LeetCode 上的 583. 两个字符串的删除操作 ,难度为 中等。 给定两个单词 s1 和 s2,找到使得 s1 和 s2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 示例: 12345输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将&qu 2021-09-24 序列 DP 最长公共子序列
LC 430. 扁平化多级双向链表 题目描述这是 LeetCode 上的 430. 扁平化多级双向链表 ,难度为 中等。 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。 示例 1:12345输入:head = [1, 2021-09-23 递归 链表 迭代
LC 326. 3的幂 题目描述这是 LeetCode 上的 326. 3的幂 ,难度为 简单。 给定一个整数,写一个函数来判断它是否是 $3$ 的幂次方。如果是,返回 $true$ ;否则,返回 $false$ 。 整数 $n$ 是 $3$ 的幂次方需满足:存在整数 $x$ 使得 $n == 3^x$ 示例 1:123输入:n = 27输出:true示例 2:123输入:n = 0输出:false示例 3:123输入: 2021-09-23 数学 打表
LC 725. 分隔链表 题目描述这是 LeetCode 上的 725. 分隔链表 ,难度为 中等。 给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 $1$ 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。 返回一个由 2021-09-21 模拟 链表
LC 58. 最后一个单词的长度 题目描述这是 LeetCode 上的 58. 最后一个单词的长度 ,难度为 简单。 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。 单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1:123输入:s = "Hello World"输出:5示例 2:123输入:s = " fly me to 2021-09-20 模拟
LC 673. 最长递增子序列的个数 题目描述这是 LeetCode 上的 673. 最长递增子序列的个数 ,难度为 中等。 给定一个未排序的整数数组,找到最长递增子序列的个数。 示例 1:12345输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:123456输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5 2021-09-20 动态规划 序列 DP 树状数组 最长上升子序列
LC 650. 只有两个键的键盘 题目描述这是 LeetCode 上的 650. 只有两个键的键盘 ,难度为 中等。 最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作: Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。 Paste(粘贴):粘贴 上一次 复制的字符。 给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 'A& 2021-09-19 动态规划 数学 线性 DP 打表
LC 292. Nim 游戏 题目描述这是 LeetCode 上的 292. Nim 游戏 ,难度为 简单。 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1-3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 2021-09-18 博弈论
LC 212. 单词搜索 II 题目描述这是 LeetCode 上的 212. 单词搜索 II ,难度为 困难。 给定一个 $m x n$ 二维字符网格 $board$ 和一个单词(字符串)列表 $words$,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例 1:123 2021-09-16 DFS 字典树 回溯算法
LC 162. 寻找峰值 题目描述这是 LeetCode 上的 162. 寻找峰值 ,难度为 中等。 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 $O(\log{n})$ 的算法来解决此问题。 示例 1:1234 2021-09-15 二分
LC 524. 通过删除字母匹配到字典里最长单词 题目描述这是 LeetCode 上的 524. 通过删除字母匹配到字典里最长单词 ,难度为 中等。 给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字典序最小的字符串。 如果答案不存在,则返回空字符串。 示例 1:123输入:s = "abpcplea&quo 2021-09-14 双指针 贪心 排序
LC 447. 回旋镖的数量 题目描述这是 LeetCode 上的 447. 回旋镖的数量 ,难度为 中等。 给定平面上 n 对 互不相同 的点 points,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。 返回平面上所有回旋镖的数量。 示例 1:12345输入:points = [[0,0] 2021-09-13 哈希表 模拟