31. 下一个排列 排列 原理就是 C++ 中的 next_permutation 函数,生成指定序列的下一个全排列 从给定序列的最右端开始,找到第一个满足 nums[i] < nums[i + 1] 的元素 nums[i] 若找不到这样的元素 nums[i]:说明当前序列是最后一个排列,函数…
1. 两数之和 哈希表 遍历数组,同时用 HashMap 维护已出现过的数及其下标 若当前的数 nums[i] 满足 target - nums[i] 曾经出现过,则直接返回 否则将其加入到哈希表中。 class Solution { public int[] twoSum(int[] nums, …
Original Link 思想: DFS。 题目所给出的路径可以连接为一个无向图。 则利用邻接矩阵来存图,从 $1$ 号点开始,深度优先遍历所有的点。 走过的路径长度用 cnt 保存,最后维护最长的 res 即可。 代码: #include <iostream> #include &l…
Original Link 思想: DFS。 从小到大依次枚举所有的数显然不现实,因此考虑按位枚举。 枚举从最高位开始,之后枚举每一位的数,直到达到指定位数为止。 枚举每一位后,需要判断当前位的数和高位数的组合数是否为质数,只有如此才能满足条件。 举例说明对于 $7331$ 的枚举过程: 第一位为 …
Original Link 思想: DFS。 由题意易知,从左上角的字母开始搜索,最多经过 $26$ 个不同的字母。 则将走过的字母利用 vis 数组进行标记,若走过标记为 True。 递归处理每一个格子,每一层利用偏移量数组遍历上下左右四个方向。 用 res 维护最大可以走过的不同字母的个数,每次…
Original Link 思想: DFS。 要想使得串保持平衡,即 (((((....))))) 形式,则设 p 为 ( 的数量,q 为 ) 的数量。 特别的,起始时为 ) 无论如何搜索都无法平衡,最大长度为 $0$。 在搜索时,当 q != 0 时,若下次出现 ( ,此时为 (()(... 亦不…
Original Link 思想: DFS。 注意棋盘的每一行,每一列及其有棋子存在的对角线的平行线上有且只有一个棋子。 递归处理,每一次递视为一次对是否放置棋子的判断,递归的层数视为棋盘的层数,每一层只能放置一个棋子。 对于递归的每一层,遍历这层棋盘的格子,判断以该格子的列和对角线的平行线上是否存…
迷宫求解 1. 问题描述 (1)根据用户选择的游戏难度程度来动态生成迷宫地图,迷宫规模为三种,分别是10 10、50 50、100 * 100。 (2)每次游戏开始需要玩家选择一个难度,然后随机生成一个迷宫地图,需要保证改迷宫地图至少存在一个解。 (3)迷宫地图由0和1构成的n维方阵表示,0表示可走…
A. Mocha 上小班啦 原题链接 题目大意: 一个数由互不相同的 $n$ 位数组成。 输出 $n$ 位的满足上述条件的最小整数(不含前导零)。 不存在则输出 $-1$。 思想: 签到题。 当 n <= 10 时,最小的 $n$ 位数的序列为 [1, 0, 2, 3, 4, 5, 6, 7,…
3.1 简单搜索 分类 DFS BFS A* (BFS+贪心) 双向广搜 双端队列广搜 双向DFS IDDFS (DFS+BFS) IDA* (IDDFS优化) 3.1.1 BFS 思想 当题目需要对一组数据进行扩展式搜索时可以考虑BFS 搜索时要将已经满足要求的点入队 不断地弹出队头,以队头元素进…