
算法与数据结构知识
文章平均质量分 71
总结力扣以及做的一些算法题的题解
程序员云锦
全栈工程师
展开
-
[算法题解详细]DFS解力扣39组合总和
题目给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为 target 的唯一组合数少于 150 个。示例1输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例2输入: candidates原创 2021-11-15 09:36:41 · 641 阅读 · 47 评论 -
[算法题解详细]DFS解力扣841钥匙和房间
题目有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i]每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 tr原创 2021-11-14 16:28:23 · 856 阅读 · 37 评论 -
[算法题解详细]DFS解力扣329矩阵中的最长递增路径
题目给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例1输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4 解释:最长递增路径为 [1, 2, 6, 9]示例2输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]输出:4 解释:最长递增路径是 [3, 4, 5, 6]。注意不允原创 2021-11-13 11:22:20 · 1451 阅读 · 40 评论 -
[算法题解详细]DFS解力扣90子集Ⅱ
题目给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例1输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例2输入:nums = [0]输出:[[],[0]]示例3 1. 1 <= nums.length <= 10 2. -10 <= nums[i] <= 10思路这道题是子集这道题原创 2021-11-12 12:07:04 · 1662 阅读 · 25 评论 -
[算法题解详细]DFS解力扣22括号生成
文章目录题目思路代码题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例1输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例2输入:n = 1输出:["()"]提示 1. 1 <= n <= 8思路这道题的解决方法有很多,我们从自己的思路开始来一步步解决这个问题首先我们肯定要写一个dfs函数,题目给原创 2021-11-11 14:55:21 · 1159 阅读 · 54 评论 -
[算法题解详细]DFS解力扣51N皇后
题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例1输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。示例2输入:n =原创 2021-11-10 07:44:17 · 701 阅读 · 17 评论 -
[算法题解详细]DFS解力扣46全排列
题目给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例1输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2输入:nums = [0,1]输出:[[0,1],[1,0]]示例3输入:nums = [1]输出:[[1]]提示 1 <= nums.length <= 6 2. -10 <= nums[i] <= 1原创 2021-11-09 12:11:42 · 926 阅读 · 18 评论 -
[算法题解详细]DFS解力扣78子集
文章目录题目思路代码题目给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例1输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2输入:nums = [0]输出:[[],[0]]提示 1. 1 <= nums.length <= 10 2. -10 <= nums[i] <= 10原创 2021-11-08 15:26:59 · 1449 阅读 · 17 评论 -
[算法题解详细]双指针解盛最多水的容器
文章目录题目思路代码题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例1输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例原创 2021-11-07 00:06:36 · 479 阅读 · 16 评论 -
[算法题解详细]回溯解力扣79单词搜索
题目给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例1输入:board = [["A","B","C","E"], ["S","F","C","S"], ["A","D","E","E"]], word = "ABCCED"原创 2021-11-06 00:37:58 · 801 阅读 · 19 评论 -
[算法题解详细]回溯法解力扣17电话号码的字母组合
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示: 1. 0 <= digits.len原创 2021-11-05 08:55:25 · 708 阅读 · 25 评论 -
[算法题解详细]回溯解力扣46全排列
题目给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。示例1输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2输入:nums = [0,1]输出:[[0,1],[1,0]]示例3输入:nums = [1]输出:[[1]]提示 1. 1 <= nums.length <= 6 2. -10 <= nums[i] <= 1原创 2021-11-04 08:09:48 · 571 阅读 · 21 评论 -
[算法题解详细]回溯法解力扣77组合
题目给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例1输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例2输入:n = 1, k = 1输出:[[1]]提示 1. 1 <= n <= 20 2. 1 <= k <= n思路看到这个题目第一时间我们可能会想到暴力循环来做,但是我们会发现原创 2021-11-03 09:08:29 · 352 阅读 · 10 评论 -
[算法题解详细]DFS解力扣419,200
题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例2输入:grid = [ ["1",原创 2021-11-02 08:06:41 · 836 阅读 · 36 评论 -
[算法题解详细]DFS解力扣695岛屿的最大面积
题目给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例1:输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0原创 2021-11-01 08:11:02 · 1811 阅读 · 25 评论 -
[算法题解详细]DFS解力扣463岛屿的周长
题目给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例1输入:grid = [[0,1,原创 2021-10-31 08:21:45 · 1028 阅读 · 22 评论 -
[算法题解详细]DFS解力扣130被围绕的区域
题目给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例1输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]解释:被围绕原创 2021-10-29 22:55:06 · 329 阅读 · 15 评论 -
c++pair对组详解
pair(对组)是一对数据组合成一个组数据,STL中的map就是将key-value放在一起作为一组数据保存基本特性pair是一种模板类型,其中包含两个数据值,两个数据的类型是可以不同的pair<int , int> 可以是两个相同的数据类型pair<int , double>也可以是两个不同的数据类型创建pair(构造pair)和容器那些的创建很类似,pair也有自己的构造方法1.默认构造方法pair<int, double> p1;2.定值初.原创 2021-10-19 21:41:36 · 594 阅读 · 0 评论