随笔分类 - LeetCode每日刷题
以medium为主
    
摘要:☆☆☆思路1:递归+回溯 思路2:动态规划。 M class Solution { public List<List<String>> partition(String s) { List<List<String>> res = new ArrayList<>(); dfs(s, 0, new Ar
        阅读全文
                
摘要:☆☆☆☆思路:回溯算法. 回溯算法事实上就是在一个树形问题上做DFS。因此,需要先将原问题转化为树形问题 每一个节点可以选择截取的方法有三种:截1位、截2位、截3位。因此每一个结点可以生长出的分支最多只有 3 条分支; 由于 ip 段最多就 4 个段,因此这棵三叉树最多 4 层,这个条件作为递归终止
        阅读全文
                
摘要:☆☆☆思路:递归。本题是典型的树形问题 使用StringBuilder要比拼接String效率高,但注意需要回溯操作。 class Solution { List<String> res; // 作为类的一个成员变量 String[] map = new String[]{ "", "", "abc
        阅读全文
                
摘要:☆☆☆思路:二叉搜索树的删除操作是最难的。。。 class Solution { public TreeNode deleteNode(TreeNode root, int key) { /** * 知识点: * 1. BST的递归模板 * 2. BST删除某个节点,可以将其替换为左子树的最右节点 
        阅读全文
                
摘要:思路:中序遍历 递归 / 非递归 class Solution { int count = 0; int res = 0; public int kthSmallest(TreeNode root, int k) { inOrder(root, k); return res; } private v
        阅读全文
                
摘要:思路:和108题类似,链表需要通过双指针寻找中间节点。 class Solution { public TreeNode sortedListToBST(ListNode head) { if (head == null) return null; if (head.next == null) re
        阅读全文
                
摘要:☆☆思路:BST的中序遍历时升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树。 可以选择中间数字作为二叉搜索树的根节点,这样分给左右子树的数字个数相同或只相差 1,可以使得树保持平衡。 class Solution { public TreeNode sortedArrayToBST(int[
        阅读全文
                
摘要:☆☆☆思路:经典的LCA问题 class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) return null; if (p == 
        阅读全文
                
摘要:☆☆思路:中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,满足BST,继续遍历;否则返回false。 技巧点:保存前一个节点 + 中序遍历 class Solution { TreeNode pre = null; public boolean isValidBST(TreeNode
        阅读全文
                
摘要:class Solution { int min = Integer.MAX_VALUE; TreeNode pre = null; public int getMinimumDifference(TreeNode root) { inOrder(root); return min; } priva
        阅读全文
                
摘要:二分搜索树: 1. 每个节点的键值大于左孩子; 2. 每个节点的键值小于右孩子; 3. 以左右孩子为根的子树仍为二分搜索树。 ☆☆思路:中序遍历,计算相邻数的差值 class Solution { int min = Integer.MAX_VALUE; TreeNode pre = null; /
        阅读全文
                
摘要:☆☆ class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { /** * 方法1:递归 */ if (p.val < root.val && q.val < root
        阅读全文
                
摘要:【举一反三】:在二叉树中找到累加和为指定值的最长路径长度 左神P115 ☆☆☆☆思路1:双重递归,第一个递归用来遍历这些节点,这二个递归用来处理这些节点,进行dfs。 思路1的缺点是存在大量重复计算,时间效率差 ☆☆☆☆☆思路2:前缀和 递归回溯。 时间复杂度为O(n),空间复杂度为O(n) 代码1
        阅读全文
                
摘要:最笨的方法可以先求出所有的路径,然后转换成对应的数字,最后求和。但是时间效率很差(耗时3ms) ☆☆☆方法1:DFS 方法2:BFS 代码1:DFS(耗时0ms) class Solution { public int sumNumbers(TreeNode root) { return dfs(r
        阅读全文
                
摘要:本题同剑指24.二叉树中和为某一值的路径 本题相似题目:LeetCode257. 二叉树的所有路径 ☆☆☆☆☆方法1:DFS前序遍历 + 回溯 ☆☆方法2:BFS层序遍历。 ☆☆☆方法3:递归 代码1:DFS前序遍历 + 回溯(耗时1ms) class Solution { public List<
        阅读全文
                
摘要:一看就会一写就废(╯﹏╰) ☆☆☆方法1:DFS前序遍历。路径是从根开始的, 于是想到前序遍历 ☆☆☆方法2:BFS层序遍历。 ☆☆☆☆方法3:递归。 代码1: class Solution { public List<String> binaryTreePaths(TreeNode root) {
        阅读全文
                
摘要:背景知识: 完全二叉树:除了最后一层,所有层的节点数达到最大,与此同时,最后一层的所有节点都在最左侧。(堆使用完全二叉树) 满二叉树:所有层的节点数达到最大。一棵层数为 h 的满二叉树,其节点数为2^h - 1个。 思路1:层序遍历 或 递归 遍历整棵树。 但没用到 完全二叉树 的性质。。不可取 思
        阅读全文
                
摘要:☆方法1:递归 方法2:BFS class Solution { public int sumOfLeftLeaves(TreeNode root) { /** * 方法1:递归 */ if (root == null) return 0; // 对当前节点进行处理 int count = 0; i
        阅读全文
                
摘要:平衡二叉树:每一个节点的左右子树的高度差不超过1. 对于一颗树,它是一个平衡二叉树需要满足三个条件:它的左子树是平衡二叉树,它的右子树是平衡二叉树,它的左右子树的高度差不大于1。 本题同:剑指39.平衡二叉树 本题的递归关键是找好递归的返回值。 ☆☆☆思路1:自顶向下的递归,类似于前序遍历。借助一个
        阅读全文
                
摘要:相同题目:剑指58.对称的二叉树 ☆☆☆☆方法1:递归。总体思路是判断两个子树相反位置上的值是否相等。 ☆☆☆☆方法2:迭代。 需要注意:如果二叉树所有节点值都相等,但结构不同仍然不对称,因此需要把节点是 null 的情况考虑进来。 class Solution { public boolean i
        阅读全文
                

浙公网安备 33010602011771号