- 博客(43)
- 收藏
- 关注
原创 lc.105 从前序与中序遍历序列构造二叉树
因此,[i_start, root_i_index-1] 和 [i_start, root_i_index] 在这里实际上是等价的,因为 root_i_index 不会超过 i_end。因此,当 p_start 指向某个节点时,它的左子树节点一定在 p_start + 1 到 p_start + leftnum 的范围内,其中 leftnum 是左子树节点的数量。在这个二叉树构建的问题中,选择 p_start >= p_end 作为边界条件是因为前序遍历数组中,每个节点的左子树都是直接跟在它后面的。
2023-12-03 20:03:33
108
原创 lc.79 单词搜索 回溯
正文给定一个 m x n 二维字符网格 board 和一个字符串单词 word。如果 word 存在于网格中,返回 true;否则,返回 false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。来源:leetcode_hot100_79。
2023-11-28 17:25:30
87
原创 lc.96 不同的搜索二叉树 卡特兰数
要算G(n)就需要G(0)~G(n-1)所有的值,for(int i=2;i++)存在的意义是为了G(i)模拟算出G(0)到G(n-1)所有的值。给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。j++)从左子树只有一个节点算起,遍历左子树从小到大的过程中的所有子树组合情况。来源:leetcode_hot100_96。
2023-11-28 17:20:59
133
原创 lc78子集 回溯
由于 Java 中的集合是对象引用的集合,这意味着每次更改 path 时,添加到 list 中的所有实例也会受到影响。如果使用 startindex+1 而不是 i+1,将导致在递归调用中始终从当前的 startindex + 1 开始,而不考虑内部循环中的 i。这样会导致生成的子集出现重复,因为每次都是从 startindex + 1 开始,而不是从当前的 i + 1。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]输出:[[],[0]]
2023-11-27 14:01:46
73
原创 lc.75颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。从左向右遍历,当当前下标i已经和b重合时证明整个数组中遍历过的当然是已经有序的,没遍历的右边全是2,因此整体都有序了。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。初始时r在-1的位置,b在length的位置,都在数组外面。输入:nums = [2,0,2,1,1,0]输入:nums = [2,0,1]输出:[0,0,1,1,2,2]输出:[0,1,2]
2023-11-21 21:04:23
25
原创 lc.72编辑距离
当 word1[i] == word2[j],dp[i][j] = dp[i-1][j-1],由于这一位相同,所以这一位不需要操作,只需要将前面的改相同即可;其中,dp[i-1][j-1] 表示替换操作,dp[i-1][j] 表示删除操作,dp[i][j-1] 表示插入操作。dp[i][j] 代表 word1 到 i 位置转换成 word2 到 j 位置需要最少步数。
2023-11-21 17:20:33
18
原创 lc.64
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]这里的f就不是路径个数了,就是从起点到这个块为止的最小和。输入:grid = [[1,2,3],[4,5,6]]解释:因为路径 1→3→1→1→1 的总和最小。思路:和lc62差不多,就是多了一个二维数组罢了。来源:leetcode_hot100_64。说明:每次只能向下或者向右移动一步。
2023-11-20 22:33:43
17
原创 lc62.不同路径
机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。思路:到每一个块的路径数=从上面来的路径数+从左边来的路径数。从左上角开始,总共有 3 条路径可以到达右下角。来源:leetcode_hot100_62。同时到达左上边界任一块路径数都为1。输入:m = 3, n = 2。输入:m = 7, n = 3。输入:m = 3, n = 3。问总共有多少条不同的路径?思路:25*9就会超时。
2023-11-20 16:05:49
30
原创 lc56.合并区间
2.讨论分那么多种情况其实一个判断intervals[i][1]>=intervals[j][0]加一个赋值intervals[i][1]=max(intervals[i][1],intervals[j][1])就能总结。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]输出:[[1,5]]
2023-09-21 14:33:53
45
原创 力扣_跳跃游戏
有0才会不能到达吧,最小是1的话怎样都能到了(一步一步跳也行啊)。不仅有0,还得有一些条件就让他们都刚好到0才行,不然都跳过了也走得通。而且有可能会有多个0[3,2,0,0,4]这样,第一个0无伤大雅但第二个0致命一击。解释:无论怎样,总会到达下标为 3 的位置。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。输入:nums = [2,3,1,1,4]输入:nums = [3,2,1,0,4]
2023-03-21 22:51:03
52
原创 最大子数组和
思路:官方写的特别好,将整个区间[l,r]分成左右两个子区间分别获得这个区间的四个值,然后递归,这四个值就可以把递归所需要用的都涵盖了。如果之前的阶段求解的子问题的结果包含了一些不确定的信息,导致了后面的阶段求解的子问题无法得到,或者很难得到,这叫「有后效性」。思路:动态规划,遍历数组,记录每个到下标i为止,以下标i为结束位置(包含nums[i])的最大和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。分治法错解但错不在分治。
2023-03-20 21:22:27
38
原创 字母异位词分组
思路:使用哈希表的思维,虽然他们顺序不一样,但同一组的他们所含字母数相同,可利用各字母数量或排序好的规定字符作为哈希表的key值,所有排序后为key的字符串的vector数组为其value。输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。输出: [[“”]]
2023-03-19 16:17:24
36
原创 leetcode_n皇后_经典回溯
的,即全排列的每个值顺序代表在棋盘格的位置,例如[1,2,3,4]即代表[“Q…每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。解释:如上图所示,4 皇后问题存在两个不同的解法。输出:[[“Q”]]
2023-03-19 15:19:38
42
原创 旋转图像_多解
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]给定一个 n × n 的二维矩阵 matrix 表示一个图像。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]旋转图像,这意味着你需要直接修改输入的二维矩阵。) 空间复杂度:O(N)
2023-03-18 19:49:31
31
原创 全排列_全排列Ⅱ
思路:利用值传递nums,每次用了什么值到下一层之前就删掉(但每次搞完都忘了还回去,没有执行撤销操作),怎么不算回溯呢✌,具体代码的注释见正解二。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。输出:[[0,1],[1,0]]一种初始化成员变量方法。
2023-03-18 17:20:46
56
原创 组合总数_
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]
2023-03-17 22:05:40
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人