
Leetcode刷题
一只胡说八道的猴子
共勉!!高处见!
展开
-
一文带你领会回溯法
回溯法概述回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。基本思想类同于:图的深度优先搜索二叉树的后序遍历可以得出解决一个回溯问题,实际上就是一个决策树的遍历过程,只有弄清楚以下三个问题1.路径:也就是已经做出的选择2.选择列表:当前可以做的选择3.结束条件:也就是到达决策树底层,无法在做选择的条件基本解题框架//定义一个集合存储结果def backtrack(路径,选择列表) i原创 2021-04-04 08:06:59 · 177 阅读 · 1 评论 -
一文带你领会BFS广搜
BFS(Breath First Search)算法套路框架BFS问题的本质概述在一副图中找到从起点start到终点target的最近距离,这个例子听起来很枯燥,但是BFS算法问题其实就是在干这件事。应用场景连连看游戏中,消除两个方块不仅图案相同,而且还要保证两个方块直接的最短连线不能多于两个拐点,即两个方块直接的可达性问题连连看的本质其实也是一张图,让你从起点走到终点,问最短路径这就是连连看的本质BFS问题的解题方法基本框架基本思想通过一个队列保存节点,然后通过该队列中的节点不断的去原创 2021-04-04 08:05:44 · 165 阅读 · 0 评论 -
Leetcode104. 二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。题解方法1:层序遍历有几层深度就是多少,做过层序遍历的都懂 public int maxDepth(TreeNode root) { Queue<TreeNode原创 2021-03-18 09:18:18 · 83 阅读 · 0 评论 -
Leetcode589. N 叉树的前序遍历
题目描述给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,n原创 2021-03-15 19:49:28 · 225 阅读 · 0 评论 -
Leetcode662. 二叉树最大宽度
题目描述给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。示例 1:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: 4解释: 最大值出现在树的第 3 层原创 2021-03-15 19:34:02 · 102 阅读 · 0 评论 -
102. 二叉树的层序遍历
题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]题目解析解题思路这题其实只要使用一个栈把二叉树每层的入队列顺序反过来即可解题代码/** * Definition for a binary tree node.原创 2021-03-15 12:16:18 · 81 阅读 · 0 评论 -
Leetcode701二叉搜索树中的插入操作
题目描述给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root = [40,20,60,10,30,50,70原创 2021-03-15 11:43:22 · 116 阅读 · 0 评论 -
Leetcode700
题目描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。题解解题思路二叉搜索树特征如下根据其特征遍历二叉树即可代码 public Tre原创 2021-03-15 11:30:55 · 112 阅读 · 0 评论 -
Leetcode559 N叉树的最大深度
题目描述给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:5 解题代码原创 2021-03-13 19:17:01 · 122 阅读 · 1 评论 -
Leetcode102. 二叉树的层序遍历
题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层序遍历结果:[[3],[9,20],[15,7]]题解public List<List<Integer>> levelOrder(TreeNode root) { if(root == null) return new Arr原创 2021-03-12 14:12:39 · 84 阅读 · 0 评论 -
145. 二叉树的后序遍历 递归解法与非递归解法
145. 二叉树的后序遍历 递归解法与非递归解法给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解法1:递归 public List<Integer> postorderTraversal(TreeNode root) { List<Integer> list = new LinkedLi原创 2021-03-11 22:42:52 · 134 阅读 · 0 评论 -
94. 二叉树的中序遍历. 递归解法与非递归解法
给定一个二叉树的根节点 root ,返回它的 中序 遍历。题目描述示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100原创 2021-03-11 21:51:37 · 180 阅读 · 0 评论 -
Leetcode 144. 二叉树的前序遍历 递归解法与非递归解法
Leetcode 144. 二叉树的前序遍历题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100原创 2021-03-11 21:13:06 · 146 阅读 · 0 评论 -
232. Leetcode232用栈实现队列
题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, s原创 2021-03-06 14:46:54 · 118 阅读 · 0 评论 -
876.Leetcode876 链表的中间结点 快慢指针思想解决
876.Leetcode876 链表的中间结点题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val =原创 2021-03-05 16:06:33 · 126 阅读 · 0 评论 -
141LeetCode141环形列表 使用快慢指针实现
LeetCode141环形列表LeetCode141环形列表题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解原创 2021-03-04 21:28:15 · 112 阅读 · 1 评论 -
小兔的棋盘解析+代码实现
小兔的棋盘问题描述Problem Description小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘。小兔有所失望。只是没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),如今小兔又想假设不穿越对角线(但可接触对角线上的格点),这种路径数有多少?小兔想了非常长时间都没想出来,如今想请你帮助小兔解决问题,对于你来说应该不难吧!Input每次输入一个数n(1<=n<=35),当n等于-1时结束输入。原创 2020-10-22 21:01:40 · 2637 阅读 · 0 评论 -
Leetcode刷题 206. 反转链表 递归迭代两种方法实现
题目链接链接:https://leetcode-cn.com/problems/reverse-linked-list/题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?预置代码/** * Definition for singly-linked list. * public class Li原创 2020-10-04 13:32:02 · 215 阅读 · 0 评论 -
Leetcode刷题 237. 删除链表中的节点 两行代码实现
题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为原创 2020-10-04 09:56:14 · 137 阅读 · 0 评论