![](https://img-blog.csdnimg.cn/20201027162824926.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
LeetCode,Java解题
疯狂java杰尼龟
路漫漫其修远兮,吾将上下而求索
展开
-
LeetCode 113.路径总和II
题目链接 113.路径总和II前序遍历path更新过程:[5,][5,4][5,4,11][5,4,11,7]因为7是叶子节点,travesal(root.left, count);travesal(root.right, count);均在遇到if (root == null) return;后就返回了,所以回溯[5,4,11][5,4,11,2]添加到result中回溯[5,4,11]回溯[5,4]回溯[5][5,8][5,8,3]回溯[5,8,4][5,8,4,原创 2022-01-13 11:17:16 · 175 阅读 · 0 评论 -
LeetCode 112. 路径总和
原题链接 112. 路径总和迭代采用前序遍历。采用两个栈,同步记录每个节点的当前路径值。(也可以使用队列,广度遍历)class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { //前序遍历 if(root == null) return false; Stack<TreeNode> s1 = new Stack<>();原创 2022-01-12 21:51:32 · 142 阅读 · 1 评论 -
LeetCode 513. 找树左下角的值
LeetCode 513原创 2022-01-12 20:32:17 · 138 阅读 · 0 评论 -
LeetCode 404. 左叶子之和
题目链接 404. 左叶子之和采用先序遍历。搞清楚条件就解决了:左孩子不空并且左孩子的左右孩子都为空。class Solution { public int sumOfLeftLeaves(TreeNode root) { //首先得是左孩子,然后它的左右孩子都为空 //采用前序遍历 int result = 0; if(root == null) return 0;//result不变 Stack<原创 2022-01-12 20:11:56 · 190 阅读 · 0 评论 -
LeetCode 572. 另一棵树的子树
过一半用例:用层序遍历得到大树的每个节点,然后再用这每个节点为根的树与小树比较是否是结构相同且值相同的树。//这种解法 是包含这个部分,但是不是子树class Solution { public boolean isSubtree(TreeNode root, TreeNode subRoot) { if(subRoot == null) return true; if(root == null) return false; //先层序遍历得到树原创 2022-01-11 19:12:10 · 331 阅读 · 0 评论 -
LeetCode 100. 相同的树
题目链接 100. 相同的树LeetCode 100. 相同的树按顺序遍历所有节点(包括空节点)(自己的错误思路)正确思路(递归法和迭代法)按顺序遍历所有节点(包括空节点)(自己的错误思路)以相同的次序依次遍历两颗树,记录结点值,再比较。就用层序遍历,但是这样必须得遍历完一棵树。如果遇到null就添加-1。class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { //首先结点的值要相同,可以层序遍原创 2022-01-11 10:42:12 · 107 阅读 · 0 评论 -
LeetCode 257. 二叉树的所有路径
二叉树的所有路径原创 2022-01-11 08:53:39 · 160 阅读 · 0 评论 -
LeetCode 515. 在每个树行中找最大值
层序遍历的应用:移步-LeetCode 515. 在每个树行中找最大值移步->LeetCode 104. 二叉树的最大深度移步->LeetCode 102. 二叉树的层序遍历移步->LeetCode 226. 翻转二叉树题目链接 515. 在每个树行中找最大值思路:采用层序遍历,每层计算得到最大值,然后每层遍历完后加入到结果列表中。注意,初始最大值设置为-(1 << 31)。class Solution { public List<Integer原创 2022-01-09 17:36:47 · 204 阅读 · 0 评论 -
LeetCode 110. 平衡二叉树
首先从高度和深度的定义上,高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数的。原创 2022-01-09 10:30:08 · 244 阅读 · 0 评论 -
LeetCode 222. 完全二叉树的节点个数
完全二叉树的节点个数原创 2022-01-08 21:03:21 · 460 阅读 · 0 评论 -
LeetCode 111. 二叉树的最小深度
题目链接-LeetCode 111. 二叉树的最小深度递归法思路:注意这里有一个陷阱。上图,左子树为空,最小深度不是1而是2(红线部分)定义最小深度是指根节点到叶子节点之间的距离,主要分为两种情况左子树空,右子树不空,返回右子树最小深度+1右子树空,左子树不空,返回左子树最小深度+1最后返回其他情况,左右子树深度的最小值+1 //递归 class Solution{ public int minDepth(TreeNode root){ if(root==原创 2022-01-08 11:18:05 · 110 阅读 · 0 评论 -
LeetCode 104. 二叉树的最大深度(包含回溯过程图)
层序遍历的应用:移步->翻转二叉树题目链接:104. 二叉树的最大深度思路: 标准的层序遍历,每次遍历完一层记录深度即可。class Solution { public int maxDepth(TreeNode root) { Queue<TreeNode> que = new LinkedList<TreeNode>(); int depth = 0; if(root == null) return depth原创 2022-01-08 09:28:28 · 513 阅读 · 0 评论 -
LeetCode 101.对称二叉树
题目链接 101.对称二叉树思路:依次检测外面的两个分支,和内部的两个分支。采用双端队列(普通队列也可以)分别存储左右的部分。具体细节见注释。class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true;//空的树也是对称 Deque<TreeNode> deque = new LinkedList<TreeNode>原创 2022-01-07 22:11:37 · 107 阅读 · 0 评论 -
LeetCode 226. 翻转二叉树
翻转二叉树原创 2022-01-07 20:16:33 · 448 阅读 · 0 评论 -
二叉树遍历
LeetCode144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历原创 2022-01-06 15:46:01 · 78 阅读 · 0 评论 -
LeetCode 455.分发饼干
LeetCode题目链接贪心算法:局部最优——>全局最优的思路先排序,然后将大的饼干依次分给胃口大的孩子。class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int result = 0;原创 2021-10-02 19:32:46 · 72 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合
LeetCode题目链接学到:加强字符串的使用,字符串转整型的方式代码中定义:void backtracking(const string &digits,int index){这里不使用&也可以通过的。欢迎讨论为什么?class Solution {private: const string letterMap[10] = { "",//0 "",//1 "abc",//2 "def",//3转载 2021-10-01 21:55:01 · 87 阅读 · 0 评论 -
LeetCode 77. 组合
LeetCode 77. 组合图中每一个节点(图中为矩形),就代表本层的一个for循环。class Solution {public: vector<vector<int>> combine(int n, int k) { backtracking(n,k,1); return result; }private: //定义两个全局变量,分别用来存储结果集合和单个结果。 vector<vector<转载 2021-10-01 17:07:10 · 280 阅读 · 0 评论 -
LeetCode 19.删除链表的倒数第N个节点
LeetCode题目链接双指针,使用虚拟头指针,slow和fast初始指向虚拟头指针,fast先走n+1步,然后slow和fast同时向后移动直到fast走到最后,然后删除slow后面的结点即可。问题:为什么fast先走n+1步?为什么同时移动,slow刚好移动到待删除的结点的前面一个位置?答:因为倒数第1个是正数第4个,倒数第2个是正数第3个,所以存在一个相加等于5的情况,所以fast先走n+1步,slow刚好在第5-(n+1)个位置上。class Solution {public: L原创 2021-09-30 16:50:36 · 76 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100算法思路:1、使用虚拟头结点:ListNode *xuniHead = new ListNod原创 2021-09-26 19:44:52 · 52 阅读 · 0 评论 -
LeetCode 206.反转链表
输入一个长度为n链表,反转链表后,输出新链表的表头。数据范围要求:空间复杂度 O(1) ,时间复杂度 O(n)。示例1输入{1,2,3}输出{3,2,1}示例2输入{}输出{}方法一、用一个temp指针存储下一个结点,采用头插法p->next = pHead//p->next指向当前的头pHead = p//改变头结点为当前的p/*struct ListNode { int val; struct ListNode *next; ListNode(in原创 2021-09-26 17:08:38 · 63 阅读 · 0 评论 -
LeetCode 707. 设计链表
题目描述:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和 next。val 是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val的节点。插入后,新节点将成为链表的第一个节原创 2021-09-25 20:17:13 · 69 阅读 · 0 评论 -
LeetCode 203. 移除链表元素
题目描述:给你一个链表的头节点 head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]提示:列表中的节点数目在范围 [0, 104] 内1 <= Node.val <= 50原创 2021-09-24 21:59:17 · 58 阅读 · 0 评论 -
LeetCode 1662. 检查两个字符串数组是否相等
代码1:class Solution {public: bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) { string s1, s2; for (string s : word1) s1 += s; for (string s : word2) s2 += s; return s1 == ..原创 2021-09-04 21:15:55 · 104 阅读 · 0 评论 -
LeetCode 55. 跳跃游戏
解题思路:如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新如果可以一直跳到最后,就成功了class Solution {public: bool canJump(vector<int>& nums) { int k=0; for(int i = 0;i<nums.size();i++){ ..转载 2021-09-04 21:12:29 · 69 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表
前沿知识:首先合并两个有序链表的代码为: 首先a 取不空的那个链表,然后将小的数的结点加入到head后面,最后将还未遍历完的链表加在最后即可。(a?b:c是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c)ListNode* mergeTwoLists(ListNode *a, ListNode *b) { i转载 2021-09-04 16:00:03 · 57 阅读 · 0 评论 -
LeetCode 112. 路径总和
方法:递归思路及算法观察要求我们完成的函数,我们可以归纳出它的功能:询问是否存在从当前节点 root 到叶子节点的路径,满足其路径和为 sum。假定从根节点到当前节点的值之和为 val,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val。不难发现这满足递归的性质,若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。若当前节点不是叶子节点...转载 2021-09-04 12:14:36 · 59 阅读 · 0 评论 -
LeetCode 509.斐波那契数
方法:动态规划 状态转移方程F(n)=F(n−1)+F(n−2),边界条件为 F(0)和 F(1)由于 F(n)只和 F(n-1)与 F(n-2)有关,因此可以使用「滚动数组思想」把空间复杂度优化成 O(1)class Solution {public: int fib(int n) { if (n < 2) { return n; } ..原创 2021-09-04 12:11:09 · 96 阅读 · 0 评论 -
【剑指 Offer_06】从尾到头打印链表_Python&Java_list&栈解法
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000目录题目描述方法一、python列表Python解法复杂度分析方法二、栈Java解法复杂度分析方法一、python列表正常能想到的解法。用一个列表来逐步添加链表中的值,再倒序输出。Python解法class Solution(object): def reversePrint(s原创 2020-11-03 14:05:04 · 216 阅读 · 0 评论 -
【LeetCode_2】两数相加_Python&Java_进位标记解法
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807目录题目描述方法一、进位标记Python解法Java解法原创 2020-11-03 09:55:53 · 294 阅读 · 2 评论 -
刷题常用基础语法
为提高自己刷题的效率,特别记录做题中常用到的语法。(全是干货,建议收藏,持续更新…)*常用基础语法Pythonsum可对列表、元组、集合、range元素加和列表长度列表排序列表及字典类型转换字符串拼接替换字符串进制转换Java数组长度数组排序类型转换创建字符串数组创建集合遍历数组中的每个元素创建字符串对象创建栈获取字符串数组中的第i个字符二进制中1的个数判断数组奇偶获取中值参考Pythonsum可对列表、元组、集合、range元素加和语法:sum(iterable,start)iterable原创 2020-11-13 14:47:07 · 199 阅读 · 0 评论 -
咸鱼干的LeetCode刷题目录——Python&Java解题
小白刷LeetCode的日常,代码都是ac过的,有参考一些大佬的题解,如有侵权,请联系博主删除。LeetCode部分LeetCode_01_Two Sum——Dic&HashLeetCode_2_两数相加——进位标记LeetCode_153_154_寻找旋转排序数组中的最小值——二分查找LeetCode_941_有效的山脉数组——线性查找LeetCode_1207_独一无二的出现次数——Dic&Map剑指Offer部分剑指 Offer_03_数组中重复的数字——Dic&a.原创 2020-11-05 10:37:58 · 277 阅读 · 0 评论 -
【剑指 Offer_38】字符串的排列_Java_深度优先搜索解法
剑指 Offer_38——字符串的排列输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8参考:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/solution/mian-shi-ti-38-zi-fu-ch转载 2020-12-04 15:45:14 · 162 阅读 · 0 评论 -
深度优先搜索(DFS)
深度优先搜索(缩写DFS)有点类似广度优先搜索,是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。给出如图3-1所示的图,求图中的V0出发,是否存在一条路径长度为4的搜索路径。处理过程:上面的例子:/** * DFS核心伪代码 * 前置条件是visit数组全部设置成false * @param n 当前开始搜索的节点 * @pa转载 2020-12-04 14:34:42 · 976 阅读 · 0 评论 -
【查找算法】插值查找算法——有序数列中的查值位置
插值查找算法,适用于有序数列中的值查找位置类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。在折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right.key就是我们要找的值算法如下:在{1,2,3,4,5}中查找3的位置,输出2public class Text { public static int insertValueSearch(int[] arr, int left, int right, int findVal转载 2020-11-23 17:48:16 · 371 阅读 · 0 评论 -
【剑指 Offer_65】不用加减乘除做加法_Java_递归及非递归超详细图解
剑指 Offer 65. 不用加减乘除做加法题目描述方法一、非进位与进位和+递归Java解法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数方法一、非进位与进位和+递归参考自面试题65. 不用加减乘除做加法(位运算,清晰图解)以及评论区大佬n=a⊕b ——非进位和:异或运算c=a&b<<1 ——原创 2020-11-12 15:27:41 · 863 阅读 · 5 评论 -
【剑指 Offer_64】求1+2+…+n_Python&Java&C++_短路递归解法
剑指 Offer 64. 求1+2+…+n题目描述方法一、“短路”+递归Java解法C++解法复杂度分析方法二、Python解法题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000参考官方解答方法一、“短路”+递归思路:用&&方法实现从n开始倒序原创 2020-11-11 14:39:23 · 281 阅读 · 0 评论 -
【剑指 Offer_10- I】斐波那契数列_Python&Java_动态规划解法
方法一、java解法class Solution {public int fib(int n) { if(n==0) return 0; if(n==1) return 1; int num1=0,num2=1,sum=0; while(n>=2){ sum=(num1+num2)%1000000007 ;//题目要求 num1=num2; num2=sum; n--原创 2020-11-11 11:33:16 · 235 阅读 · 0 评论 -
【剑指 Offer_15】二进制中1的个数_Python&Java_逐位相与解法
剑指 Offer 15. 二进制中1的个数“前戏”正题——剑指 Offer 15. 二进制中1的个数竟然有这种解法!!!Java解法Python解法C++解法“前戏”刷题有时候也没辣么枯燥,比如这样这个坤坤和杰哥我是经常见了。常常使我破涕而笑~没有别的意思,晒出来就是好玩~杰哥很努力啊 ~ 杰哥你也好勇 ~今天刷题刷到——剑指 Offer 15. 二进制中1的个数涨新姿势了有木有~我只能评论1无所有:)主要是最最最基础的题刷完一道少一道,路越来越难走,做题的激情有所下降,而在这个网站上原创 2020-11-10 16:01:20 · 728 阅读 · 0 评论 -
【LeetCode_977】有序数组的平方_Python&Java_双指针&归并排序&首尾双指针解法
Leetcode——977. 有序数组的平方题目描述方法一、平方后排序Java 解法Python 解法复杂度分析方法二、双指针+归并排序Java 解法复杂度分析方法三、双指针Java 解法复杂度分析总结参考部分,如有侵权,请联系博主删除。题目描述给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49.原创 2020-11-09 17:30:22 · 232 阅读 · 0 评论