回顾
冒 菜
这个作者很懒,什么都没留下…
展开
-
leecode 491. 递增子序列
491. 递增子序列 本题和子集||看起来是相似的,看起来可以用boolean数组判断是否重复,但是实际上本题不能这么做,因为本题不是有序数组,而是要判断是否有序,因此需要换个思路。做回溯类题最重要的是画图,画图难度少一大半,而且逻辑性很强class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList<...原创 2022-03-05 10:28:07 · 96 阅读 · 0 评论 -
leecode 93. 复原 IP 地址
93. 复原 IP 地址本题需要画图具体判断,由于分支太多,直接剪枝符合要求的结果即可。class Solution { List<String> res = new LinkedList<>(); public List<String> restoreIpAddresses(String s) { if (s == null || s.length() == 0 || s.length() >.原创 2022-03-04 10:29:14 · 88 阅读 · 0 评论 -
leecode 131. 分割回文串
131. 分割回文串本题核心思想:具体可以看代码随想录解释,把这题最简化了。 最好理解:class Solution { List<List<String>> res = new ArrayList<>(); LinkedList<String> path = new LinkedList<>(); public List<List<String>> pa...原创 2022-03-04 08:57:08 · 153 阅读 · 0 评论 -
leecode 40. 组合总和 II
40. 组合总和 II 本题是组合总和的加强版,要求不能够有重复的集合,但是集合中可以有重复元素,第一想法是按照正常做法进行然后利用哈希表储存,但是这样做会超时,只能另寻他法,这里可以看看代码随想录的思想,利用一个新的boolean数组判断,具体如下:class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList<Integer...原创 2022-03-03 18:43:04 · 84 阅读 · 0 评论 -
leecode 17. 电话号码的字母组合
17. 电话号码的字母组合 本题进一步强化了回溯的做法,需要用到字符串相关API,挺头疼。class Solution { // 数字到号码的映射 private String[] map = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; // 路径 private StringBuilder sb = new StringBuilder(); // 结果集 ...原创 2022-03-03 15:07:48 · 153 阅读 · 0 评论 -
leecode 216. 组合总和 III
216. 组合总和 III 本题是力扣77.组合的升级版,原来是要求求出所有符合条件k和n的集合,本题要在上一题的基础上求出集合的和,符合条件的输出为集合,因此可以回溯算法。//普通回溯+递归:class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList<Integer> path = new LinkedList&...原创 2022-03-02 14:07:42 · 163 阅读 · 0 评论 -
leecode 108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树 本题仍然是数组转二叉树的一种题型,不过这题转二叉搜索树会更方便些,和最大二叉树是同一类题型,需要用一个方法放置数组,和左右边界的位置。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode()...原创 2022-03-01 10:17:05 · 132 阅读 · 0 评论 -
leecode 450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点 本题是删除搜索树中的指定值,和添加值比,却复杂很多,但是本题的具体逻辑我竟然能自己慢慢实现出来,第一次感觉到对递归理解加深了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * ...原创 2022-02-28 20:29:14 · 121 阅读 · 0 评论 -
leecode 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先代码随想录/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { //本题需要利用二叉树的回溯,而后序遍历本身就是天然.原创 2022-02-26 15:41:51 · 225 阅读 · 0 评论 -
leecode 501. 二叉搜索树中的众数
501. 二叉搜索树中的众数 本题是一个二叉搜索树,遇到二叉搜索树最清楚的是用中序遍历,因为中序遍历直接由小到大排序,然后根据要求修改代码。本题需要找到众数,经过中序遍历后记录排序后的数组的最大众数,直接得到结果,但是代码实现比较麻烦。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr...原创 2022-02-26 00:15:42 · 171 阅读 · 0 评论 -
leecode 530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差 本题仍然是二叉搜索树,由于中序遍历搜索树是按照由小到大排列,因此只需要将树中序遍历,用一个pre树记录当前节点的前一个节点,然后判断结果大小,最终输出即可。这里pre容易搞错,以上图为例,当前节点为2时,我刚开始还以为pre是3,其实是1。因为中序遍历先把左子树节点遍历完以后再往回遍历,而pre记录的当前节点就是最小节点,从最小节点开始慢慢由小到大遍历。这里后期回顾要好好复习./** * Definition for a binary...原创 2022-02-24 12:16:29 · 249 阅读 · 0 评论 -
leecode 98. 验证二叉搜索树
98. 验证二叉搜索树 这题用两种递归,首先想到的是用当前节点和左右节点的值比较,但是最后仍然失败了。主要是因为二叉搜索树要保证的是当前节点的左子树全部小于当前节点的值,右子树全部大于当前节点的值。如果只比较左右节点,有可能当前节点右子树的左节点比当前节点还小,但是仍然符合递归条件,如下是错误示例。class Solution { public boolean isValidBST(TreeNode root) { if(root == ...原创 2022-02-24 11:35:21 · 366 阅读 · 0 评论 -
leecode 113. 路径总和 II
113. 路径总和 II这题是112. 路径总和的变体,需要注意两个题的区别,112题是求二叉树是否存在一个与目标值相等的和,如果有相等的值,直接返回,不用管其他分支是否还有,因为这个树上已经存在一个与目标值相等的分支,因此这题不用遍历整个树;而本题是需要找到所有与目标值相等的分支,因此需要对整个树遍历,当遍历到符合目标值的时候,就将这个分支记录下来,直到整棵树遍历后再去看有多少结果,最终输出所有符合要求的树分支。/** * Definition for a binar...原创 2022-02-22 11:01:36 · 259 阅读 · 0 评论 -
leecode 105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 这个图表明了这个二叉树的遍历顺序,但是下标是按照左闭右闭原则,我的做法是左闭右开/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val...原创 2022-02-21 18:22:23 · 84 阅读 · 0 评论 -
leecode 106. 从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树'递归的还原过程:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int原创 2022-02-21 17:19:52 · 237 阅读 · 0 评论 -
leecode 513. 找树左下角的值
513. 找树左下角的值迭代:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l.原创 2022-02-17 12:15:34 · 157 阅读 · 0 评论 -
leecode 257. 二叉树的所有路径
257. 二叉树的所有路径第一种方法:递归。需要注意,原题答案需要输出 "->" ,因此需要用StringBuffer拼接。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int v...原创 2022-02-13 11:15:02 · 231 阅读 · 0 评论 -
leecode 110. 平衡二叉树
110. 平衡二叉树本题用自顶向下递归和自底向上递归两种方法,后一种方法是最优解。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val ...原创 2022-02-11 11:04:05 · 270 阅读 · 0 评论 -
leecode 222. 完全二叉树的节点个数
222. 完全二叉树的节点个数/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l.原创 2022-02-10 11:13:23 · 309 阅读 · 0 评论 -
leecode 347. 前 K 个高频元素
347. 前 K 个高频元素本题还是细节处理比较多,我不太熟悉小顶堆大顶堆,这个题花了一个多小时在搞基础,具体细节在代码部分。class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> map = new HashMap<>(); for (int i = 0; i < num...原创 2022-02-04 11:52:41 · 854 阅读 · 0 评论 -
leecode 150. 逆波兰表达式求值
150. 逆波兰表达式求值本题很容易想到用栈来解决,需要处理细节比较多,首先用Deque创建一个队列LinkedList作栈使用,其次需要想办法将数字放入,这里需要用一个n1和n2标记此时的出栈数字,然后对栈进行操作将原栈中数字修改成运算符操作后的结果。以上是我觉得做这题的难点,首先我不熟悉栈的创建(Deque<Integer> stack = new LinkedList<Integer>();),其次不知道如何让运算符不入栈(使用isNumber()方法,如果是运算.原创 2022-02-04 09:57:37 · 403 阅读 · 0 评论 -
leecode 28. 实现 strStr()
28. 实现 strStr()本题第一种算法是暴力解,比较容易解决,也是本题的标准答案。class Solution { public int strStr(String haystack, String needle) { int m = haystack.length(); int n = needle.length(); char[] s = haystack.toCharArray(); char[] p原创 2022-01-28 10:54:10 · 1597 阅读 · 0 评论 -
leecode 151. 翻转字符串里的单词
151. 翻转字符串里的单词本题首先可以用java内置方法实现,具体参考官方答案。其次,可以使用多个自制方法实现,源字符串为:"the sky is blue ",创建一个方法实现去除多余空格,"the sky is blue";一个方法实现字符串反转,"eulb si yks eht";一个方法实现单词反转,"blue is sky the"。这题我用的第三种方法做的,这种方法没实现。第三种方法是利用双指针,这里参考评论区答案思想自己完成实现,但是细节上差的太多,最终还是看着答原创 2022-01-24 12:39:56 · 269 阅读 · 0 评论 -
leecode 剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格本题难点主要是char和String类型转换不太熟练,由于 ‘’ 需要转成 ‘%20’ 扩充了三倍,因此假设一个char数组为原字符串的三倍长,用size为索引标记最后一位的位置,最后返回新字符串String,以size为字符串长度。法一:class Solution { public String replaceSpace(String s) { char[] res = new char[3*s.length()]..原创 2022-01-24 10:54:19 · 222 阅读 · 0 评论 -
leecode 541. 反转字符串 II
541. 反转字符串 II不看答案这题做起来是真麻烦,而且最后也没做对,只能精通cv了。class Solution { public String reverseStr(String s, int k) { char[] ch = s.toCharArray(); // 1. 每隔 2k 个字符的前 k 个字符进行反转 for (int i = 0; i< ch.length; i += 2 * k) {原创 2022-01-22 11:15:00 · 92 阅读 · 0 评论