02 2023 档案

摘要:欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-回溯总结 适用问题 组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等 阅读全文
posted @ 2023-02-28 21:13 cupxu 阅读(78) 评论(0) 推荐(0) 编辑
摘要:欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II LeetCode 491. 递增子序列 分析 找出并返回所有数组中不同的递增子序列 绝对不能先升序 绝对不能先升序 绝对不能先升序 这样会改变原有数组的结构 子序列中元素在数组中不 阅读全文
posted @ 2023-02-28 11:03 cupxu 阅读(59) 评论(0) 推荐(0) 编辑
摘要:欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练 93.复原IP地址 78.子集 90.子集II LeetCode 93. 复原 IP 地址 分析 字符串全部由数字组成,ipv4每一段数字不能有前导0,且大小∈[0,255] 等价于将字符串进行分割,并判断分割后的数是否满足条件 插入一个点 阅读全文
posted @ 2023-02-27 21:45 cupxu 阅读(31) 评论(0) 推荐(0) 编辑
摘要:欢迎关注个人公众号:爱喝可可牛奶 LeetCode 39. 组合总和 40.组合总和II 131.分割回文串 LeetCode 39. 组合总和 分析 回溯可看成对二叉树节点进行组合枚举,分为横向和纵向 每次往sum添加新元素时,必须明确从can哪个位置开始,定义变量pos 返回条件 sum == 阅读全文
posted @ 2023-02-26 15:10 cupxu 阅读(48) 评论(0) 推荐(0) 编辑
摘要:LeetCode 216.组合总和III 分析1.0 回溯问题 组合总和sum == n 时以及path中元素个数 == k 时,res.add(new path) 返回后递归删除掉当前值 class Solution { public List<List<Integer>> res = new A 阅读全文
posted @ 2023-02-24 15:11 cupxu 阅读(19) 评论(0) 推荐(0) 编辑
摘要:基础知识 回溯法解决的问题都可以抽象为树形结构,集合的大小就构成了树的宽度,递归的深度构成的树的深度 void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; back 阅读全文
posted @ 2023-02-20 10:23 cupxu 阅读(16) 评论(0) 推荐(0) 编辑
摘要:LeetCode 669. 修剪二叉搜索树 分析1.0 递归遍历树时删除符合条件(不在区间中)的节点-如何遍历如何删除 如果当前节点大于范围,递归左树,反之右树 当前节点不在范围内,删除它,把它的子树返回给上一层 class Solution { public TreeNode trimBST(Tr 阅读全文
posted @ 2023-02-19 10:25 cupxu 阅读(11) 评论(0) 推荐(0) 编辑
摘要:LeetCode 235. 二叉搜索树的最近公共祖先 分析1.0 二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行 class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNod 阅读全文
posted @ 2023-02-16 12:42 cupxu 阅读(15) 评论(0) 推荐(0) 编辑
摘要:LeetCode 530.二叉搜索树的最小绝对差 分析1.0 二叉搜索树,中序遍历形成一个升序数组,节点差最小值一定在中序遍历两个相邻节点产生 ✡✡✡ 即 双指针思想在树遍历中的应用 class Solution { TreeNode pre;// 记录上一个遍历的结点 int result = I 阅读全文
posted @ 2023-02-07 21:48 cupxu 阅读(18) 评论(0) 推荐(0) 编辑
摘要:LeetCode 654.最大二叉树 分析1.0 if(start == end) return节点索引 locateMaxNode(arr,start,end) new root = 最大索引对应节点 max.right = 最大节点右侧子数组的最大值 要保证能够递归 max.left = 最大节 阅读全文
posted @ 2023-02-07 00:15 cupxu 阅读(15) 评论(0) 推荐(0) 编辑
摘要:LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solution { ArrayDeque<TreeNode> queue = new ArrayDeque(); 阅读全文
posted @ 2023-02-05 15:00 cupxu 阅读(13) 评论(0) 推荐(0) 编辑
摘要:LeetCode 110.平衡二叉树 分析1.0 求左子树高度和右子树高度,若高度差>1,则返回false,所以我递归了两遍 class Solution { public boolean isBalanced(TreeNode root) { if(root == null){ return tr 阅读全文
posted @ 2023-02-04 17:44 cupxu 阅读(4) 评论(0) 推荐(0) 编辑
摘要:基础知识 二叉树的多种遍历方式,每种遍历方式各有其特点 LeetCode 104.二叉树的最大深度 分析1.0 往下遍历深度++,往上回溯深度-- class Solution { int deep = 0, max = 0; public int maxDepth(TreeNode root) { 阅读全文
posted @ 2023-02-01 23:27 cupxu 阅读(10) 评论(0) 推荐(0) 编辑