![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode-dfs
KobeSacre
这个作者很懒,什么都没留下…
展开
-
机器人的运动范围
leetcode原创 2022-12-06 22:07:40 · 99 阅读 · 0 评论 -
字符串的排列
leetcode原创 2022-09-28 10:40:53 · 58 阅读 · 0 评论 -
路径总和 III
路径总和 III题目:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例 1:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。示例 2:输入:root = [5,4,8,11原创 2022-05-16 11:23:13 · 107 阅读 · 0 评论 -
从根节点到叶节点的路径数字之和
从根节点到叶节点的路径数字之和题目:给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3]输出:25解释:从根到叶子节点路径 1->2 代表数字 12从根到叶子节点路径 1->3 代表数字原创 2022-04-26 11:25:22 · 951 阅读 · 0 评论 -
二叉树剪枝
二叉树剪枝题目:给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。节点 node 的子树为 node 本身,以及所有 node 的后代。示例 1:输入: [1,null,0,0,1]输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。示例 2:输入: [1,0,1,0,0,0,1]输出: [1,null,1,null,1]解释: 示例.原创 2022-04-19 15:32:57 · 222 阅读 · 0 评论 -
带重复元素的排列
带重复元素的排列题目:描述给出一个具有重复数字的列表,找出列表所有不同的排列。样例样例 1:输入:nums = [1,1] 输出:[ [1,1] ] 解释:[1,1]的不同排列只有[1,1]。样例 2:输入:nums = [1,2,2] 输出:[ [1,2,2], [2,1,2], [2,2,1] ] 解题思路:首先思考如何去重,先对数组进行排序后再使用标记数组来进行标记,之后进行dfs即可public class Solution {原创 2021-08-16 19:32:23 · 142 阅读 · 0 评论 -
数字组合
数字组合题目:描述给定一个候选数字的集合 candidates 和一个目标值 target。 找到 candidates 中所有的和为 target 的组合。在同一个组合中, candidates 中的某个数字出现次数不限。所有数值 (包括 target ) 都是正整数.返回的每一个组合内的数字必须是非降序的.返回的所有组合之间可以是任意顺序.解集不能包含重复的组合.样例样例 1:输入: candidates = [2, 3, 6, 7], target = 7输出: [[7]原创 2021-08-11 16:25:05 · 161 阅读 · 0 评论 -
合并二叉树
合并二叉树题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入:输出:合并后的树:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode原创 2021-06-30 18:01:06 · 115 阅读 · 0 评论 -
二叉树的直径
二叉树的直径题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。解题思路:根据示例可以看出,二叉树的直径 = 左子节点最大深度 + 右子节点最大深度,因此用dfs计算每一个节点的直径取最大值即可/** * Definition for a binary tree原创 2021-06-30 17:20:31 · 274 阅读 · 0 评论 -
路径总和 III
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。原创 2024-01-04 16:49:21 · 422 阅读 · 0 评论 -
不同的二叉搜索树 II
不同的二叉搜索树 II题目:示例 1:输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]示例 2:输入:n = 1输出:[[1]]解题思路:用dfs进行解决,分别遍历以[1, n]为根节点时形成的二叉树,得到它的左子节点和右子节点的组成后,进行组合/** * Definition for a binary tree node. * public class TreeNod原创 2021-06-22 15:33:49 · 68 阅读 · 0 评论 -
把二叉搜索树转换为累加树
把二叉搜索树转换为累加树题目:给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]示例 2:输入:root = [0,null,原创 2021-06-11 20:39:56 · 61 阅读 · 0 评论 -
目标和
目标和题目:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标原创 2021-06-11 17:09:29 · 125 阅读 · 0 评论 -
打家劫舍 III
打家劫舍 III题目:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3 / \ 2 3 \原创 2021-06-10 15:13:16 · 65 阅读 · 0 评论 -
删除无效的括号
删除无效的括号题目:给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1:输入:s = “()())()”输出:["(())()","()()()"]示例 2:输入:s = “(a)())()”输出:["(a())()","(a)()()"]示例 3:输入:s = “)(”输出:[""]解题思路: 首先计算出字符串中多余的左右括号数, 再用dfs来枚举出删除相应数目的左右括号(优先删除右括原创 2021-06-10 14:20:06 · 347 阅读 · 0 评论 -
课程表 II
课程表 II题目:现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]]输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺原创 2021-06-08 21:35:15 · 82 阅读 · 0 评论 -
课程表
课程表题目:你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例 1:原创 2021-06-08 17:12:59 · 77 阅读 · 0 评论 -
二叉树中的最大路径和
二叉树中的最大路径和题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,nul原创 2021-06-07 20:32:28 · 131 阅读 · 0 评论 -
电话号码的字母组合
电话号码的字母组合题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]解题思路:先用list保存对应数字的原创 2021-05-30 13:22:04 · 115 阅读 · 0 评论 -
子集 II
子集 II题目:给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:输入:nums = [0]输出:[[],[0]]class Solution { public List<List<Integer>> subsetsWithD原创 2021-03-31 12:10:45 · 76 阅读 · 0 评论 -
单词搜索
单词搜索题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回原创 2021-03-15 11:25:46 · 83 阅读 · 0 评论 -
组合总和
组合总和题目:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], targe原创 2021-03-04 09:54:02 · 106 阅读 · 1 评论 -
省份数量
省份数量题目:有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。示例 1:输入:isC原创 2021-01-07 10:25:33 · 156 阅读 · 1 评论 -
将数组拆分成斐波那契序列
将数组拆分成斐波那契序列题目:给定一个数字字符串 S,比如 S = “123456579”,我们可以将它分成斐波那契式的序列 [123, 456, 579]。形式上,斐波那契式序列是一个非负整数列表 F,且满足:0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型);F.length >= 3;对于所有的0 <= i < F.length - 2,都有 F[i] + F[i+1] = F[i+2] 成立。另外,请注意,将字原创 2020-12-08 20:35:48 · 136 阅读 · 0 评论 -
分割回文串
分割回文串题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]解题思路:首先创建一个数组记录i到j是否为回文,之后用dfs进行回溯class Solution { public List<List<String>> partition(String s) { if(s == null)原创 2020-11-23 17:39:55 · 286 阅读 · 0 评论 -
括号生成
括号生成题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路:用回溯解决,不好想到的是方法中传入左括号和右括号剩下的数量class Solution { private List<String> ans = new ArrayList(); public List<Strin原创 2020-11-04 14:02:47 · 111 阅读 · 0 评论 -
组合
leetcode原创 2020-11-04 10:28:07 · 107 阅读 · 0 评论 -
子集
子集题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路:用回溯算法解决,在纸上画出整个子集[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]可以总结出规律class Solution { private List<L原创 2020-11-04 10:13:44 · 155 阅读 · 0 评论 -
N 皇后
N 皇后题目:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。解题思路:用回溯解决,先初始化一个数组作为棋盘,再对每一行进行判断class Solution { private List<List<String>> an原创 2020-11-03 15:32:43 · 80 阅读 · 0 评论 -
全排列
全排列题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解题思路:dfs遍历所有决策class Solution { private List<List<Integer>> ans = new ArrayList(); public List<List<Integer>>原创 2020-11-03 14:27:17 · 69 阅读 · 0 评论 -
岛屿的周长
岛屿的周长题目:给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例 :输入:[[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0原创 2020-10-30 11:58:31 · 95 阅读 · 0 评论