字母异位词分组
力扣 49. 字母异位词分组题目说明给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。
提示:
1 <= strs.length <= 10^4
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
示例示例 1:
12输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
12输入: strs = [""]输出: [[""]]
示例 3:
12输入: strs = [& ...
对称二叉树
力扣 101. 对称二叉树题目说明
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
笔者理解此题是一道二叉树算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,采用了翻转右子树再递归比较的方式,让我们来看看具体如何实现的吧。
实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...
接雨水
力扣 42. 接雨水题目说明给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
提示:
n == height.length
0 <= n <= 3 * 10^4
0 <= height[i] <= 10^5
示例示例 1:
123输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
12输入:height = [4,2,0,3,2,5]输出:9
笔者理解此题是一道数组算法问题,在力扣题库中被定义为困难题。
解法当笔者阅读完此题后,每个柱子的蓄水量与 其左边和右边最大值中的较小值 与当前柱子的差值有关,,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132class Solution { /* ...
全排列
力扣 46. 全排列题目说明给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同
示例示例 1:
12输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
12输入:nums = [0,1]输出:[[0,1],[1,0]]
示例 3:
12输入:nums = [1]输出:[[1]]
笔者理解此题是一道数组算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,采用了回溯的办法,本题是经典的回溯问题,试探并回退就是精髓,让我们来看看具体如何实现的吧。
实现12345678910111213141516171819202122232425262728293031323334class Solution { public List<List<In ...
二叉树的后序遍历
力扣 145. 二叉树的后序遍历题目说明给定一个二叉树,返回它的 后序 遍历。
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
示例示例 1:
12345678输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]
笔者理解此题是一道二叉树算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,采用了迭代的办法,迭代就是通过栈来模拟递归的过程,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * T ...
组合总和
力扣 39. 组合总和题目说明给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。
candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
提示:
1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每个元素都是独一无二的。
1 <= target <= 500
示例示例 1:
12输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]
示例 2:
12输入: candidates = [2,3,5], target = 8输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:
12输入: candidates = [2], target = 1输出: [ ...
搜索旋转排序数组
力扣 33. 搜索旋转排序数组题目说明整数数组 nums 按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
提示:
1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
nums 中的每个值都 独一无二
题目数据保证 nums 在预先未知的某个下标上进行了旋转
-10^4 <= target <= 10^4
示例示例 1:
12输入:nums = [4,5,6,7,0 ...
下一个排列
力扣 31. 下一个排列题目说明实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100
示例示例 1:
12输入:nums = [1,2,3]输出:[1,3,2]
示例 2:
12输入:nums = [3,2,1]输出:[1,2,3]
示例 3:
12输入:nums = [1,1,5]输出:[1,5,1]
示例 4:
12输入:nums = [1]输出:[1]
笔者理解此题是一道数组算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,采用两次扫描的解法,先找出第一个倒序不符合升序的元素,再寻找倒序第一个大于之前元素的元素,最后再翻转后面的元素,保证只比原数大一点,让我们来看看具体如何实现的吧。
实现12345678910111213141516171819 ...
括号生成
力扣 22. 括号生成题目说明数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
有效括号组合需满足:左括号必须以正确的顺序闭合。
提示:
1 <= n <= 8
示例示例 1:
12输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
12输入:n = 1输出:["()"]
笔者理解此题是一道字符串算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,采用了和电话号码的字母组合类似的队列解法,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132333435363738394041class Solution { /* * 字符串 * 队列 */ public List< ...
删除链表的倒数第N个结点
力扣 19. 删除链表的倒数第 N 个结点题目说明给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
示例示例 1:
12输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]
示例 2:
12输入:head = [1], n = 1输出:[]
示例 3:
12输入:head = [1,2], n = 1输出:[1]
笔者理解此题是一道链表算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,直接用一个动态数组将节点存起来再删除指定节点即可,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132333435363738394041/** * Definition for singly-linked list. * publi ...








