![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
一只懒惰的小虫子
这个作者很懒,什么都没留下…
展开
-
合并K个升序链表——优先级队列
描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出:[]分析原创 2022-02-09 15:44:32 · 167 阅读 · 0 评论 -
括号生成——递归+剪枝
描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]分析看到所有组合,首先想到递归来解决,每次递归都尝试添加左括号,然后添加右括号,当左括号大于0的时候可以继续分支,退出的条件是左右括号都相等且都为0,需要注意的是,当左括号剩余数量大于右括号时,不符合题目要求,说明需要剪枝。原创 2022-02-09 10:51:02 · 297 阅读 · 0 评论 -
合并两个有序链表-递归
描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = [0]输出:[0]代码public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } else if原创 2022-02-09 09:42:15 · 475 阅读 · 0 评论 -
删除链表的倒数第 N 个结点
描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1,2], n = 1输出:[1]思路1、本题的本质是删除链表中某个位置的结点,通过循环将指针移到待删除指针的前一个指针,涉及到浅拷贝以及头节点不能移动的问题,所以用临时变量temp储存。2、遍历链表,得到有效的链表长度,链表长度-n 就是待删除位置的前一个节点3、考虑到可能删除的是头节点,所以原创 2022-02-08 16:34:28 · 462 阅读 · 0 评论 -
电话号码的字母组合-回溯(递归)
描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2输入:digits = “2”输出:[“a”,“b”,“c”]分析当题目中出现 “所有组合” 等类似字眼时,我们第一感觉就要想到用回溯。import java.util.A原创 2022-02-08 14:57:34 · 98 阅读 · 0 评论 -
盛最多水的容器-双指针
描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2输入:height = [1,1]输出:1分析原创 2022-02-08 10:21:17 · 105 阅读 · 0 评论 -
最长回文子串-中心扩散法
描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:**输入:**s = “a”输出:“a”分析本题采用的方法是 中心扩散法。从每一个位置出发,向两边扩散即可。首先往左寻找与当期位置相同的字符,直到遇到不相等为止。然后往右寻找与当期位置相同的字符,直到遇到不相等为止。最后左右双向扩散,直到左和右不相等。每个位置向两边扩散原创 2022-02-07 10:51:43 · 638 阅读 · 0 评论