递归算发题
文章平均质量分 54
一碗机智的糖浆
这个作者很懒,什么都没留下…
展开
-
51. N 皇后(java实现)--LeetCode
文章目录题目:解法1:递归(对角线规律)解法2:递归(遍历每层)解法3:递归(从下往上)题目:解法1:递归(对角线规律)/** * 思路: * 从上往下 * 核心思路:确定一个皇后的位置,列上,对角线上不能有其他皇后。右侧的对角线上的数,row-col的相同的。左侧对角线上的数,row+col相同。 * 0,0 0,1 0,2 0,3 * 1,0 1,1 1,2 1,3 * 2,0 2,1 2,2 2,3 * 主对角线(左)row+col相同。从对角线(右)row-col相同 *原创 2021-02-01 19:07:15 · 201 阅读 · 0 评论 -
17. 电话号码的字母组合(java实现)--LeetCode
文章目录题目:解法1:递归解法2:迭代题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:原创 2021-02-01 16:49:07 · 287 阅读 · 0 评论 -
169. 多数元素(java实现)--LeetCode
文章目录题目:解法1:排序解法2:随机数解法3:位运算解法4:分治解法5:MorreVoting解法6:map题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。解法1:排序/** *原创 2021-01-31 17:50:18 · 377 阅读 · 0 评论 -
78. 子集(java实现)--LeetCode
文章目录题目:解法1:递归解法2:递归(放格子)解法3:迭代解法4:位运算题目:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10原创 2021-01-31 16:08:01 · 384 阅读 · 0 评论 -
50. Pow(x, n)(java实现)--LeetCode
文章目录题目:解法1:暴力解法2:递归解法3:快速幂解法4:快速幂(迭代)题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25提示:-100.0 < x < 10原创 2021-01-31 12:57:18 · 290 阅读 · 0 评论 -
47. 全排列 II(java实现)--LeetCode
文章目录题目:解法1:递归(标记法)解法2:递归(交换法)题目:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nu原创 2021-01-25 19:09:16 · 269 阅读 · 0 评论 -
46. 全排列(java实现)--LeetCode
文章目录题目:解法1:递归(换位)解法2:题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解法1:递归(换位)/** * 思路: * 放格子,第一个格子放所有的数 * 第二个放除第一个格子外所有的数 * 第三个格子放除1,2格子中的所有的数 * 。。。 * 最后就是所有的可能性 * * 为了实原创 2021-01-25 17:49:30 · 342 阅读 · 0 评论 -
77. 组合(java实现)--LeetCode
文章目录题目:解法1:递归(队列)解法2:递归(ArrayList)题目:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解法1:递归(队列)/** * 思路: * 如果当前队列的长度是k,就往结果集中加入 * 遍历所有可能的组合,1所有,2所有。。。 * 把当前的数加入队列 * 删除队列尾原创 2021-01-25 17:23:21 · 151 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树(java实现)--LeetCode
解法1:递归/** * 思路: * 1 * 2 3 * 4 5 6 7 * * 中序:425 1 637 * 后序:452 673 1 * * 根据中序遍历我们可以知道根节点的位置,以及根节点的左子树和右子树各有多少个节点:425 1 637 * 在知道左子树和右子树个数的情况下,我们就能在后序遍历中找到左子树和右子树的起点和终点 * 之后递归的设置左右子树 */ public TreeNode buildTree(int[] inorder, i原创 2021-01-25 14:20:39 · 168 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树(java实现)--LeetCode
文章目录题目:解法1:递归解法2:递归(光头哥说的On^2的情况)解法3:递归(光头哥说的用map降到On的情况)题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解法1:递归光头哥原文:https://leetcode.com/p原创 2021-01-25 14:02:36 · 397 阅读 · 3 评论 -
236. 二叉树的最近公共祖先(java实现)--LeetCode
文章目录题目:解法1:递归解法2:迭代题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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,2,0,8,null,null,7,4], p = 5, q原创 2021-01-25 13:13:39 · 372 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化(java实现)--LeetCode
文章目录题目:解法1:递归解法2:队列解法3:递归(超出内存限制)题目:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3原创 2021-01-21 20:13:23 · 118 阅读 · 0 评论 -
111. 二叉树的最小深度(java实现)--LeetCode
文章目录题目:解法1:递归题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000解法1:递归/** *原创 2021-01-21 17:28:09 · 265 阅读 · 0 评论 -
104. 二叉树的最大深度(java实现)--LeetCode
文章目录题目:解法1:递归题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。解法1:递归 /** * 思路 * 遍历树 * 不断的递归,记录左右节点的深度,返回其中最大的 */ pub原创 2021-01-21 17:15:20 · 276 阅读 · 0 评论 -
98. 验证二叉搜索树(java实现)--LeetCode
文章目录题目:解法1:中序遍历解法2:递归解法3:stack题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,原创 2021-01-20 11:32:59 · 119 阅读 · 0 评论 -
226. 翻转二叉树(java实现)--LeetCode
文章目录题目:解法1:递归(从上到下)解法2:递归(自下到上)解法3:队列解法4:栈(和队列的代码完全一样)题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时原创 2021-01-20 11:09:10 · 241 阅读 · 0 评论 -
22. 括号生成(java实现)--LeetCode
文章目录题目:解法1:递归题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8解法1:递归/** * 思路 * 重复性,如何用左右括号 * 括号合法条件: * 左括号随时可加,只要不超标 * 右括号前面必须有左括号原创 2021-01-20 10:50:58 · 156 阅读 · 0 评论