LeetCode-31 下一个排列
下一个排列题目描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。 给你一个整数数组 nums ,找出 nums 的下一个排列。 必须 原地 修改,只允许使用额外常数空间。 数据样例示例 1 12输入:nums = [1,2,3]输出:[1,3,2] 示例 2 12输入:nums = [3,2,1] ...
LeetCode-22 括号生成
括号生成题目描述数字 $n$ 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 数据样例示例 1: 12输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 12输入:n = 1输出:["()"] 提示: $1 \leq n \leq 8$ 深度优先搜索 DFS - $O(4 ^ N)$题目的 数据范围很小,因此可以考虑暴力搜索 DFS 搜索过程: 可以将问题看成:将括号放入长度为 $2 * n$ 个空位中。可以依次看每个空位。 每个空位有两种选择:(, ) 为了便于大家理解,DFS 搜索空间树 如下图所示: 那么我们知道,不是所有最终搜索得到的序列都是满足条件的,如图中所示: 标注红色序列为合法序列 标注黑色序列为不合法序列 因此需要将不合法的序列去掉,图中的 紫色部分 是为了去掉所有不合法的括号序列: 由于左括号和右括号数量相同, ...
LeetCode-17 电话号码的字母组合
如果大家有任何不明白的,直接评论就好啦。可以留自己的邮箱,这样可以方便直接回复,嘿嘿嘿。 电话号码的字母组合题目描述给定一个仅包含数字 $2-9$ 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 $1$ 不对应任何字母。 数据样例示例 1: 12输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 12输入:digits = ""输出:[] 示例 3: 12输入:digits = "2"输出:["a","b","c"] 提示: $0 \leq digits.length \leq 4$ digits[i] 是范围 [ ...
LeetCode-3 无重复字符的最长子串
无重复字符的最长子串题目描述给定一个字符串 $s$ ,请你找出其中不含有重复字符的 最长子串 的长度。 数据样例示例 1: 123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 123输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 1234输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 提示: $0 \leq s.length \leq 5 * 10 ^ 4$ $s$ 由英文字母、数字、符号和空格组成 双指针,哈希表 - $O(N)$双指针,哈希表首先考虑直接暴力枚举,那么需要枚举所有的字串,枚举一个字符串的所有字串,由于字符串的字串是连续的,因此 ...
LeetCode-2 两数相加
两数相加题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 $0$ 之外,这两个数都不会以 $0$ 开头。 数据样例示例 $1$: 123输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807. 示例 $2$: 12输入:l1 = [0], l2 = [0]输出:[0] 示例 $3$: 12输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1] 提示: 每个链表中的节点数在范围 $[1, 100]$ 内 $0 \leq Node.val \leq 9$ 题目数据保证列表表示的数字不含前导零 模拟 - $O(N)$模拟加法题目保证每个链表节点 仅存储一位数字且逆序存储,因此对两个数的相加可以直接从链表头开始枚举模拟加法的过程即可 题目数据为例,加法过程如下: 注意点: 模拟加法过程中注意判断 链表是否为 ...
LeetCode-1 两数之和
准备开始更新 LeetCode 题解,难一些的题目会尽可能给出直观的图像来讲解,简单的题解尽可能题解写的短一些,重点会加粗标记。 - 挖坑开始应要求,代码会写 C++, Go 两个版本🎉,代码可能写的很烂,未来尽可能优化一下 逃~每篇文章都会有标签,方便查询 两数之和题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 数据样例示例 1: 123输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 12输入:nums = [3,2,4], target = 6输出:[1,2] 示例 3: 12输入:nums = [3,3], target = 6输出:[0,1] 哈希表 - $O(N)$哈希表题目要求解出满足 $x + y = tar ...
SHU20thSC 逃离魔爪
逃离魔爪题目描述安全穿过了雷区,你居然发现了一片农场,此时农场上十分热闹。 AuMiner 正在追捕一位在 QQ 农场偷菜的小偷 xyx,好不容易马上就要抓到 xyx 了,xyx 突然回头求饶不要抓我,AuMiner 回应道可以不抓你但是你必须回答我的一系列问题,小偷 xyx 紧张极了,你能帮助小偷 xyx 逃离 AuMiner 的魔爪吗? Auminer 有一块 $n \times m$ 的矩形地块,一开始,里面所有的格子都写着 $0$,代表所有地都未锄好,而 $1$ 代表地已经锄好。 AuMiner 会有以下的操作和询问: $1, x_1, y_1, x_2, y_2$, $(1 \leq x_1 \leq x_2 \leq n,1 \leq y1 \leq y_2 \leq m)$ 表示对 QQ 农场矩形范围左上角 $(x_1, y_1)$ 到右下角 $(x_2, y_2)$ 进行锄地,写有 $0$ 的田地会变成 $1$,写有 $1$ 的田地会变成 $0$。 $2, x_1, y_1, x_2, y_2$, $(1 \leq x_1 \leq x_2 \leq n,1 \ ...