- 博客(105)
- 收藏
- 关注
原创 LeetCode 剑指 Offer 30. 包含min函数的栈
难度 简单定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:提示: 这道题是让我们设计一个最小栈,就是比栈多一个功能Min,那这个功能怎么设计呢,我觉得比较简单的就是设计一个同样大小栈,这个栈主要记录前面到现在的最小值,一起入栈出栈。 比如给的样例 在三次push的时候,两个栈分别为[-3, 0, -2]和[-3, -2, -2],第二个为最小值栈,记录开始到现在的最小值,这样min的时间复杂度就
2022-06-09 15:11:27
195
1
原创 LeetCode 202. 快乐数
难度 简单编写一个算法来判断一个数 是不是快乐数。「快乐数」 定义为:如果 是 快乐数 就返回 ;不是,则返回 。示例 1:示例 2:题解 这道题看起来挺简单的,就是把数拆分了,然后把这些数平方相加,如果等于1就返回true,不能返回1就返回false。不过一直在考虑一个问题就是,如果不等于1会不会无限大和陷入死循环,我一开始也没想明白这个问题。会不会无限大答案是不会的,可以参考官方题解快乐数 - 快乐数 - 力扣(LeetCode)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下
2022-06-07 11:06:56
177
原创 LeetCode 201. 数字范围按位与
难度 中等给你两个整数 和 ,表示区间 ,返回此区间内所有数字 按位与 的结果(包含 、 端点)。示例 1:示例 2:示例 3:提示: 刚开始看到的时候,就觉得是数学题目,就去看看有什么规律,然后果然找到一个规律,就是如果left右移一位还小于right的话,一定返回0。(简称跨位与)当5 & 6 & 7 = 4时,4的二进制位1004 & 8 = 0,很容易就发现,如果right(9)大于left(5)左移一位(right > left
2022-06-01 13:01:00
237
原创 LeetCode 343. 整数拆分
343. 整数拆分难度 中等给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。示例 1:输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。提示:`2 <= n <= 58题解 官方给出了动态规划和数学方法,就讲一下动态规划方法吧。
2022-05-31 15:49:45
165
原创 LeetCode 322. 零钱兑换
322. 零钱兑换难度 中等给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins =
2022-05-30 15:42:37
384
原创 LeetCode 583. 两个字符串的删除操作
583. 两个字符串的删除操作难度 中等给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。示例 1:输入: word1 = "sea", word2 = "eat"输出: 2解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"示例 2:输入:word1 = "leetcode", word2 = "etco"输出:4提示:1 <= word1.l
2022-05-29 11:43:50
206
原创 LeetCode 72. 编辑距离
72. 编辑距离难度 困难给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')示例 2:输入:wo
2022-05-28 15:13:05
126
原创 LeetCode 1143. 最长公共子序列
1143. 最长公共子序列难度 中等给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 =
2022-05-24 13:28:27
224
原创 LeetCode 673. 最长递增子序列的个数
673. 最长递增子序列的个数难度 中等给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。注意 这个数列必须是 严格 递增的。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。提示:1 <= nums.length <= 2000
2022-05-21 14:50:10
223
原创 LeetCode 300. 最长递增子序列
300. 最长递增子序列难度 中等给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:
2022-05-20 18:14:50
210
原创 LeetCode 139. 单词拆分
139. 单词拆分难度 中等给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。示例 2:输入: s = "applepenapp
2022-05-19 22:01:52
248
原创 LeetCode 91. 解码方法
91. 解码方法难度 中等一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> "1"'B' -> "2"...'Z' -> "26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6"
2022-05-18 10:22:14
227
原创 LeetCode 413. 等差数列划分
413. 等差数列划分难度 中等如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。
2022-05-17 10:31:34
213
原创 LeetCode 5. 最长回文子串
5. 最长回文子串难度 中等给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"提示:1 <= s.length <= 1000s 仅由数字和英文字母组成题解 这里需要解释两个概念,回文和子串。回文就是从左往右和从右往左读都是一样的,比如abcba。子串和子序列不一样,子串必须连续,子序列不一定连续。 这道题是让我们
2022-05-16 18:51:45
139
原创 LeetCode 62. 不同路径
62. 不同路径难度 中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 ->
2022-05-15 14:54:30
125
原创 LeetCode 45. 跳跃游戏 II
45. 跳跃游戏 II难度 中等给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,
2022-05-14 14:44:51
105
原创 LeetCode 55. 跳跃游戏
55. 跳跃游戏难度 中等给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所
2022-05-13 08:42:37
128
原创 LeetCode 213. 打家劫舍 II
213. 打家劫舍 II难度 中等你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号
2022-05-12 11:39:34
133
原创 LeetCode 79. 单词搜索
79. 单词搜索难度 中等给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"输
2022-05-11 11:04:37
181
原创 LeetCode 22. 括号生成
22. 括号生成难度 中等数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8题解 这道题是要让我们枚举所有正常的括号序列,那还是需要用的枚举方法,这里我使用递归枚举方法,这种方法可以搜索所有结果集,然后加上判断,就可以找到所有
2022-05-10 11:46:45
133
原创 LeetCode 17. 电话号码的字母组合
17. 电话号码的字母组合难度 中等给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0 &l
2022-05-08 13:16:18
369
原创 LeetCode 40. 组合总和 II
40. 组合总和 II难度 中等给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。**注意:**解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]示例 2:输入: candid
2022-05-07 19:22:57
190
原创 LeetCode 39. 组合总和
39. 组合总和难度 中等给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7
2022-05-06 12:31:01
126
原创 LeetCode 47. 全排列 II
47. 全排列 II难度 中等给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10题
2022-05-05 15:17:49
175
原创 LeetCode 90. 子集 II
90. 子集 II难度 中等给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10题解
2022-04-25 16:02:17
111
原创 LeetCode 78. 子集
78. 子集难度 中等给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nu
2022-04-24 15:18:13
483
原创 LeetCode 797. 所有可能的路径
797. 所有可能的路径难度 中等给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。示例 1:输入:graph = [[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]]解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3示例 2:
2022-04-23 15:27:21
1004
原创 LeetCode 130. 被围绕的区域
130. 被围绕的区域难度 中等给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例 1:输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O"
2022-04-22 17:18:35
188
原创 LeetCode 1091. 二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径难度 中等给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:路径途经的所有单元格都的值都是 0 。路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。畅通路径的长度 是该路径途经的单
2022-04-18 10:09:56
327
原创 LeetCode 572. 另一棵树的子树
572. 另一棵树的子树难度 简单给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,nul
2022-04-17 14:43:57
255
原创 LeetCode 117. 填充每个节点的下一个右侧节点指针 II
117. 填充每个节点的下一个右侧节点指针 II难度 中等给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂
2022-04-16 18:12:22
205
原创 LeetCode 547. 省份数量
547. 省份数量难度 中等有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。示例 1:
2022-04-15 12:18:58
782
原创 LeetCode 200. 岛屿数量
200. 岛屿数量难度 中等给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入
2022-04-14 11:43:48
156
原创 LeetCode 209. 长度最小的子数组
209. 长度最小的子数组难度 中等给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nu
2022-04-13 13:30:35
838
原创 LeetCode 713. 乘积小于K的子数组
713. 乘积小于K的子数组难度 中等给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0
2022-04-12 12:32:29
170
原创 LeetCode 438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词难度 中等给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。示例 2:输入: s = "a
2022-04-11 14:57:01
466
原创 LeetCode 11. 盛最多水的容器
11. 盛最多水的容器难度 中等给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 4
2022-04-10 15:10:59
161
原创 LeetCode 986. 区间列表的交集
986. 区间列表的交集难度 中等给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而 secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。返回这 两个区间列表的交集 。形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b 。两个闭区间的 交集 是一组实数,要么为空集,要么
2022-04-09 16:29:22
413
原创 LeetCode 844. 比较含退格的字符串
844. 比较含退格的字符串难度 简单给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。**注意:**如果对空文本输入退格字符,文本继续为空。示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。示例 2:输入:s = "ab##", t = "c#d#"输出:true解释:s 和 t 都会变成 ""。示例 3:输入:s = "a#c", t = "b"
2022-04-08 12:44:20
153
原创 LeetCode 1. 两数之和
1. 两数之和难度 简单给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,
2022-04-07 17:43:32
81
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人