
递归
萌萌,站起来
这个作者很懒,什么都没留下…
展开
-
new 正则表达式匹配 6.6 又看一遍 匹配*需要注意??? leetcode 10 动态规划
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配标题解这题需要把题意仔细研究清楚,反正我试了好多次才明白的。首先,考虑特殊情况:1>两个...原创 2019-10-26 19:23:22 · 152 阅读 · 0 评论 -
lee129 根节点到叶子节点数字之和
lee129 根节点到叶子节点数字和给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->...原创 2020-03-29 15:00:49 · 193 阅读 · 0 评论 -
玩转lee46 全排列 未完待续 lee47 全排列2 (抛去重复的)
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路 回溯法有点看不懂 递归的过程public class Solution { public List<List<Integer>> permute...原创 2020-03-28 17:27:07 · 143 阅读 · 0 评论 -
玩转lee131 分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]...原创 2020-03-28 16:17:28 · 128 阅读 · 0 评论 -
lee树相关问题 左叶子节点的和
求所有右叶子节点和我的思路:class Solution { int sum=0; public int sumOfLeftLeaves(TreeNode root) { if (root == null) return 0;//递归结束条件 // int left, right; if (root.left != null &a...原创 2020-03-12 21:26:44 · 132 阅读 · 0 评论 -
lee322 凑零钱问题 动态规划
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每...原创 2020-02-19 15:08:29 · 300 阅读 · 0 评论 -
玩转动态规划 lee91解码方法 a-1b-2 看有多少种情况
一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (2...原创 2020-02-14 18:06:52 · 330 阅读 · 0 评论 -
玩转lee52 n皇后问题
思路 回溯法找每一行index中 棋子应该放在的列号(i)所以应该设几个标号因为是一行一行摆放,因此这些 “皇后” 一定不在同一行,无需额外设置状态;为了保证不再同一列, 设 col [ ] 数组设置标志位,如果占了就true为了保证至少两个皇后不同时出现在主对角线或者副对角线,我们的策略是,只要 “检测” 到新摆放的 “皇后” 与已经摆放好的 “皇后” 冲突,就尝试摆放下一...原创 2020-02-12 14:47:41 · 111 阅读 · 0 评论 -
玩转lee floodfill lee417太平洋大西洋水流问题(运行不通)
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵:...原创 2020-02-11 22:26:35 · 160 阅读 · 0 评论 -
玩转floodfill lee130被包围的区域(找不到错误)
给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。...原创 2020-02-11 21:17:32 · 137 阅读 · 0 评论 -
玩转lee floodfill 算法 lee200(其他方法未看)
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3回溯法 试试里面有要注意的小问题要好好想想这个过程是...原创 2020-02-11 20:30:04 · 150 阅读 · 0 评论 -
玩转lee 二维平面上搜索 lee79 单词搜索(未完待续)
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true...原创 2020-02-11 17:31:32 · 150 阅读 · 0 评论 -
玩转lee90 子集 2
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]递归class Solution { public List<List<Integer>> subsetsWithDup(int[]...原创 2020-02-10 17:55:09 · 119 阅读 · 0 评论 -
玩转 lee39 组合总和 (可重复、 lee40 组合总和2(不可重复)、lee216 组合总和3
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7]...原创 2020-02-10 15:41:22 · 230 阅读 · 0 评论 -
lee77 组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]递归class Solution { public List<List<Integer>> combine(int n, int k) { ...原创 2020-02-10 14:14:57 · 178 阅读 · 0 评论 -
玩转树形问题 lee17 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。经典问题递归总结过程就是 比如输入2...原创 2020-02-09 16:41:32 · 124 阅读 · 0 评论 -
玩转236 二叉树的最近公共祖先 (LCA) lowest common ancestor of a binary tree
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,...原创 2020-02-09 12:55:43 · 130 阅读 · 0 评论 -
玩转230 二叉搜索树中第k小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数示例 1:输入: root = [3,1,4,null,2], k = 13/ 1 42输出: 1思路 中序遍历 存到arraylist中/** * Definition for a binary tree node....原创 2020-02-08 17:11:46 · 182 阅读 · 0 评论 -
玩转 lee108 将有序数组转化为二叉树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 5递归如果做了 98 题 和 99 题,...原创 2020-02-06 22:49:01 · 197 阅读 · 0 评论 -
玩转 二分搜索树 lee450 删除二分搜索树节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = 35/ ...原创 2020-02-06 22:05:47 · 129 阅读 · 0 评论 -
玩转 二分搜索树 lee235 二分搜索树最近公共祖先 、lee98 验证二分搜索树 在琢磨琢磨3.29
什么是二分搜索树常见操作都可以O(logn)实现lee235 两个节点最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,...原创 2020-02-06 20:28:34 · 175 阅读 · 1 评论 -
lee437 路径总和
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 810/ ...原创 2020-02-06 13:53:01 · 149 阅读 · 0 评论 -
玩转lee257 二叉树的所有路径 lee113路径总和
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入:1/ 2 35输出: [“1->2->5”, “1->3”]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3递归class Solution { public List<String> bi...原创 2020-01-31 14:26:25 · 423 阅读 · 0 评论 -
玩转lee二叉树 路径总和 节点个数 叶子节点个数 第k层节点的个数 所有节点和 所有叶子节点和 所有左叶子节点和
路经总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 ...原创 2020-01-30 17:12:10 · 290 阅读 · 0 评论 -
玩转二叉树常考题 最大最小深度 翻转二叉树 判断二叉树对称 完全二叉树节点个数(3.29在思考思考) 判断平衡二叉树(返回深度 ,看是不是-1))
求二叉树最小深度 递归class Solution { public int minDepth(TreeNode root) { if(root==null) return 0; return helper(root); } public int helper(TreeNode root){ if(r...原创 2020-01-29 22:35:34 · 366 阅读 · 0 评论 -
玩转lee23 合并k个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6思考 优先队列用容量为K的最小堆优先队列,把链表的头结点都放进去,然后出队当前优先队列中最小的**,挂上链表,然后让出队的那个节...原创 2020-01-27 17:38:54 · 164 阅读 · 0 评论 -
二叉树的前中后序遍历 递归 迭代 3.31改进
前序遍历迭代用栈辅助/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Soluti...原创 2020-01-21 12:35:02 · 116 阅读 · 0 评论 -
new 反转链表
三个指针public class Solution { public ListNode ReverseList(ListNode head) { if(head==null||head.next==null) return head; // ListNode dummy=new ListNode(-1); // dumm...原创 2019-11-19 15:41:14 · 70 阅读 · 0 评论 -
经典递归问题 数组里的数组合全部列出 ???
1和2 列出来 1,2,12,21考察递归算法public class heihei { static void listAll(String candidate, String prefix) { if ( candidate.length() == 0) { System.out.println(prefix); } for (int i ...原创 2019-11-09 20:59:08 · 122 阅读 · 0 评论 -
new 二叉搜索树与双向链表 递归没看懂
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路一 非递归 栈1.核心是中序遍历的非递归算法。2.修改当前遍历节点与前一遍历节点的指针指向。import java.util.*;public class Solution { public TreeNode Convert(TreeNode pRoo...原创 2019-11-02 15:15:13 · 113 阅读 · 0 评论 -
new 机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路 回溯递归同上一题矩阵中的路径类似,回溯递归...原创 2019-10-30 11:23:11 · 102 阅读 · 0 评论 -
new 矩阵中的路径 自己写的运行不通
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的...原创 2019-10-30 10:14:19 · 89 阅读 · 0 评论 -
new 序列化二叉树 二叉树和字符串的来回转换
请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字...原创 2019-10-29 10:27:41 · 446 阅读 · 0 评论 -
new 对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:递归首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同左子树的右子树和右子树的左子树相同即可,采用递归非递归也可,采用栈或队列存取各级子树根节点public class Solution { boolean isSymmetrical(TreeNode ...原创 2019-10-27 17:40:26 · 86 阅读 · 0 评论 -
new 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。重复遍历多次的解法 简单上题求二叉树的深度,想到一种思路:遍历树的每个节点的时候,调用函数TreeDepth得到他的左右子树深度,,如果每个节点左右子树深度相差都不超过1,那么就是平衡二叉树。public class Solution { public boolean IsBalanced_Solution(TreeNode root) ...原创 2019-10-23 20:22:00 · 110 阅读 · 0 评论 -
new 二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。递归 要理解意思public class Solution { public int TreeDepth(TreeNode root) { if(root==null) return 0; int leftnum...原创 2019-10-23 19:05:09 · 132 阅读 · 0 评论 -
new排序数组中查找数字
统计一个数字在排序数组中出现的次数。直接遍历数组统计出现次数 O(n)二分搜索找到一个数,然后再分别前后扫描O(n)更好的用二分查找二分查找直接找到第一个k和最后一个k??一、.找第一个k先看数组中间,mid>k,下次在数组前半段找mid《k,在后半段找就可以了如果mid=k,先判断是不是第一个k,1.如果中间数的前一个也是k,那么第一个k在前半段找2.如果不是k了,那...原创 2019-10-23 13:34:52 · 110 阅读 · 0 评论 -
new 数组中的逆序对 归并排序没看明白
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007直接扫描整个数组,没扫描到一个数字,逐个和他后面的数字比较,如果比他小,就组成了一个逆序对时O(n^2)不能逐个搜,先比较相邻的数...原创 2019-10-20 17:16:13 · 132 阅读 · 0 评论 -
new 字符串的排列 ????
对于无重复值的情况固定第一个字符,递归取得首位后面的各种字符串组合;再把第一个字符与后面每一个字符交换,并同样递归获得首位后面的字符串组合; *递归的出口,就是只剩一个字符的时候,递归的循环过程,就是从每个子串的第二个字符开始依次与第一个字符交换,然后继续处理子串。假如有重复值呢?*由于全排列就是从第一个数字起,每个数分别与它后面的数字交换,我们先尝试加个这样的判断——如果一个数...原创 2019-10-18 15:12:51 · 137 阅读 · 0 评论 -
new 二叉树的双向链表 未完
标题输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。原创 2019-10-18 14:40:56 · 104 阅读 · 0 评论