LeetCode
文章平均质量分 53
weixin_43763889
这个作者很懒,什么都没留下…
展开
-
LeetCode 212 单词搜索 II
给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 思路:将字典中的单词构成前缀树,然后对board进行bfs。 有两个点,一是因为题目要求包含的单词,没有数量要求,所以找到一个单词后,我们可以将它从前缀树中清楚,二是当一个分支到了叶子结点,说明这个分支上单词都找完了.原创 2021-01-18 22:36:13 · 114 阅读 · 0 评论 -
LeetCode 131. 分割回文串 139.单词拆分 140 单词拆分
131 分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ] 题解: dfs+dp dp[i][j] 代表s[i…j]是否是回文串,如果s[i] = s[j] 且 dp[i+1][j-1] = true,则dp[i][j] = true 然后dfs,如果前缀字符串是回文,则可以产生分支和结点; 如果前缀字符串不是回文,则不产生分支和结点,这一步是剪枝操原创 2021-01-17 18:13:31 · 125 阅读 · 0 评论 -
LeetCode 1024. 视频拼接
题目描述: 你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。 视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。 我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返原创 2020-10-24 21:29:16 · 14345 阅读 · 0 评论 -
LeetCode 15.三数之和 18.四数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 解法:其实就是对三重循环暴力用双指针的优化加剪枝,保证组合不重复,首先将数组排序,遍历时如果当前数等于该重循环上一个数,则跳过。 双指针在这道题的原创 2020-10-05 19:26:33 · 86 阅读 · 0 评论 -
LeetCode 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 2 / 2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 解析:根据BST树的特征,BST树的中序遍历是一个非递减数列,所以求出树的中序遍历,再去遍历这个序列即可 /** * Definition fo原创 2020-09-25 12:01:52 · 83 阅读 · 0 评论 -
LeetCode 78.子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 解法一: 因为给出的数字不含重复的,所以数据很小。可以利用二进制位确定当前这个数选还是不选,0 - 2的n-1次方减一, 每个数的二进制代表一种选法 import java.util.ArrayList; import java.util.Li原创 2020-09-20 21:34:24 · 68 阅读 · 0 评论 -
LeetCode 332. 重新安排行程
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。 提示: 如果存在多种有效的行程,请你按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前 所有的机场都用三个大写字母表示(机场代码)。 假定所有机票至少存在一种合理的行程。 所有的机票必须都用一次 且 只能原创 2020-08-28 23:46:06 · 85 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 解法: 每次选一个数字的一个字母,dfs遍历所有可能 import java.util.LinkedList; import java.util.List; class Solution { String[] list原创 2020-08-26 16:02:05 · 159 阅读 · 0 评论 -
LeetCode 491. 递增子序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。 数组中的整数范围是 [-100,100]。 给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。 解法:dfs遍历所有可能的子序列,每个位置只有选与不选两个选择 保证序列是原创 2020-08-25 23:41:35 · 80 阅读 · 0 评论 -
LeetCode 459. 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两次构成。 示例 2: 输入: “aba” 输出: False 示例 3: 输入: “abcabcabcabc” 输出: True 解法:遍历每个长度的字符串,如果当前子串长度可以被字符串长度整除,按顺序截取后面等长度子串,判断与第一个子串是否相等 class Solution { publ原创 2020-08-24 12:28:43 · 129 阅读 · 0 评论 -
LeetCode 201. 数字范围按位与
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 解法:按位与,都为1才是1,否则为0,一段连续的区间,找到端点的公共前缀,后面的部分因为连续,每一列都肯定有0,所以后面全是0,我们先将数向左移,移到两个数相等,再像右移补零 class Solution { public int rangeBitwise原创 2020-08-23 23:18:54 · 107 阅读 · 0 评论 -
LeetCode 679 24点游戏
你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。 解法:暴力模拟加回溯 import java.util.LinkedList; import java.util.List; class Solution { Double e = 1e-6; boolean flag = false; public boolean judgePoint24(int[] nums) { List<Double>.原创 2020-08-22 21:18:01 · 189 阅读 · 0 评论 -
LeetCode 111 二叉树的最小深度
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 解法:bfs /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ import.原创 2020-08-21 16:09:40 · 73 阅读 · 0 评论 -
LeetCode 529 扫雷游戏
让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板: 如果一个地雷(‘M’)被挖出,游戏就结束了- 把它改为 ‘X’。 如果一个没有相.原创 2020-08-20 23:21:25 · 130 阅读 · 0 评论 -
LeetCode 647 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 解法: 遍历每个回文中心,回文中心可能是单个字符,也可能是两个字符。所以我们加一层循环来处理单双回文中心,然后向两边扩展,如果是回文子串,就加一 class Solution { public int countSubstrings(String s) { int len = s.length(),ans = 0; for.原创 2020-08-19 23:51:22 · 85 阅读 · 0 评论 -
LeetCode 109 有序链表转换二叉搜索树
题目描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 解法一:分治 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.原创 2020-08-18 23:59:14 · 61 阅读 · 0 评论 -
LeetCode 110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 树的高度:从结点x向下到某个叶结点最长简单路径中边的条数 思路一:从下倒上遍历,先判断当前节点的左右子节点是否平衡。如果不平衡返回-1,平衡返回相应高度,当存在不平衡的子树时,整个树也就不平衡了 /** * Definition for a binary tree node. * public class TreeNode { * int val;原创 2020-08-17 22:40:16 · 61 阅读 · 0 评论