![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
anieoo
这个作者很懒,什么都没留下…
展开
-
133. 克隆图
原题链接:133. 克隆图 solution: dfs建立原点到克隆点的映射,在遍历一遍即可原创 2022-07-07 21:42:49 · 90 阅读 · 0 评论 -
130. 被围绕的区域
原题链接:130. 被围绕的区域 solution: dfs原创 2022-07-07 21:17:32 · 71 阅读 · 0 评论 -
91. 解码方法
原题链接:91. 解码方法 solution: 动态规划:状态表示:dp[i]表示字符串s[0 ~ i - 1]的解码方法数转移方程: 类似于爬楼梯的dp[i] = dp[i - 1] + dp[i - 2],只不过加了约束条件 深度优先搜索+记忆化...原创 2022-06-15 12:18:09 · 99 阅读 · 0 评论 -
60. 排列序列
原题链接:60. 排列序列 solution: 利用全排列的做法,找到第k个序列原创 2022-06-14 10:12:52 · 92 阅读 · 0 评论 -
1723. 完成所有工作的最短时间
原题链接:1723. 完成所有工作的最短时间 solution: dfs + 回溯 + 剪枝①结束条件:任务分配完成,maxt保存所有工人的最大工作时长,再用maxt和以前的最大工作时长res进行比较,更新res。②分配时间,深度优先搜索,先把所有任务优先分配给第一个人,回溯以后再往下一个人进行分配。③剪枝条件1:如果当前分配的工人时长大于以前分配结束的最大工人时长,进行剪枝④剪枝条件2:如果回溯后,工人工作时间workers[i] == 0,进行剪枝,因为该工人后面的工作时间全是0,原创 2022-06-12 16:01:21 · 368 阅读 · 0 评论 -
90. 子集 II
原题链接:90. 子集 II solution: 回溯+去重原创 2022-06-06 16:10:34 · 67 阅读 · 0 评论 -
93. 复原 IP 地址
原题链接:93. 复原 IP 地址 solution: 回溯问题原创 2022-06-06 11:49:15 · 74 阅读 · 0 评论 -
131. 分割回文串
原题链接:131. 分割回文串 solution: 递归+回溯原创 2022-06-03 16:18:23 · 64 阅读 · 0 评论 -
40. 组合总和 II
原题链接:40. 组合总和 IIsolution: 这题和组合总和I很相似,唯一的不同是会出现重复的数字,并且每个数字只能选取一次。因此需要实现去除重复数字。 加入组合数字为 1 1 2 5 ,target = 8,满足条件的组合为1 2 5 和 1 2 5,第一个1和第2个1都可以实现满足条件,因此加入以下代码: sort(candidates.begin(),candidates.end());if(i > u && candidates[i] == candidat原创 2022-06-03 16:16:30 · 85 阅读 · 0 评论 -
216. 组合总和 III
原题链接:216. 组合总和 III solution: 组合问题是典型的回溯问题,注意好终止条件,和去重原创 2022-06-03 10:09:38 · 66 阅读 · 0 评论 -
473. 火柴拼正方形
原题链接:473. 火柴拼正方形solution: 深度优先搜索+剪枝原创 2022-06-01 10:24:40 · 82 阅读 · 0 评论 -
51. N 皇后
原题链接:51. N 皇后solution:dfs问题,按每行进行遍历col[i],dq[u - i + n],udq[u + i],表示行、斜线和反斜线上有没有皇后,如果没有皇后吗,就在当前行放置皇后,并遍历到下一行。const int N = 20;class Solution {public: bool col[N],dq[N],udq[N]; //保存行、斜线和反斜线是否存在皇后 vector<vector<string>> ..原创 2022-05-26 10:51:26 · 62 阅读 · 0 评论 -
675. 为高尔夫比赛砍树
原题链接:675. 为高尔夫比赛砍树solution:广度优先搜索,首先将所有点按高度从小到大进行排序,每两个点更新一次最大距离。时间复杂度O(m^2 + n^2)bfs函数返回start到end的最短距离class Solution {public: vector<vector<int>> g; int m,n; const int INF = 0x3f3f3f3f; struct Tree { ..原创 2022-05-23 11:17:36 · 78 阅读 · 0 评论 -
301. 删除无效的括号
原题链接:301. 删除无效的括号solution:dfs + 剪枝首先统计需要删除的无效左括号和右括号 for(int i = 0 ; i < n ; i ++) { if(s[i] == '(') l ++; if(l == 0 && s[i] == ')') r ++; else if(s[i] == ')') l --; }遍历字符串.原创 2022-05-21 09:48:39 · 299 阅读 · 0 评论 -
691. 贴纸拼词
原题链接:691. 贴纸拼词solution:class Solution {public: int stickersize; //统计有多少个贴纸 int minStickers(vector<string>& stickers, string target) { stickersize = stickers.size(); //统计有多少个贴纸 unordered_map<strin...原创 2022-05-14 10:16:58 · 130 阅读 · 0 评论 -
437. 路径总和 III
原题链接:437. 路径总和 IIIsolution: 双重递归,一重递归递归遍历节点数,一重递归递归路径和class Solution {public: int res = 0; int pathSum(TreeNode* root, int targetSum) { if(root == nullptr) return 0; dfs(root,targetSum); pathSum(root->le...原创 2022-05-12 10:12:17 · 65 阅读 · 0 评论 -
207. 课程表
原题链接:207. 课程表solution: bfs,用邻接表构建图的关系,最后每次将入度为0的节点存入队列const int N = 1e5 + 10;int e[N],ne[N],h[N],idx,sta[N];class Solution {public: void add(int a,int b) { e[idx] = b; ne[idx] = h[a]; sta[b]++; //保存a有几个入度 ...原创 2022-05-08 09:46:28 · 220 阅读 · 0 评论 -
433. 最小基因变化
原题链接:433. 最小基因变化solution: bfsclass Solution {public: typedef pair<int,int> PII; bool cal_distace(string a,string b) { //如果两个基因串距离为1则返回true int num = 0; for(int i = 0; i < 8; i++) { i...原创 2022-05-07 09:35:25 · 95 阅读 · 0 评论 -
200. 岛屿数量
原题链接:200. 岛屿数量solution: dfs深搜class Solution {public: vector<vector<char>> grids; int m,n; int res = 0; //返回值 int dx[4] = {-1,0,1,0},dy[4] = {0,-1,0,1}; void dfs(int x,int y){ if(x < 0...原创 2022-04-29 14:42:48 · 101 阅读 · 0 评论 -
543. 二叉树的直径
原题链接:543. 二叉树的直径solution: dfs+迭代. dfs函数返回以root为根节点的最大深度/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) ...原创 2022-04-29 10:33:01 · 621 阅读 · 0 评论 -
417. 太平洋大西洋水流问题
原题链接:417. 太平洋大西洋水流问题solution: 本题采用逆向思考,考虑太平洋和大西洋出发能抵达的点,从太平洋出发能抵达的点或1,从大西洋出发能抵达的点或2,因此两个都可以抵达的点值就为3.dfs做法:class Solution {public: vector<vector<int>> w; //保存岛屿 vector<vector<int>> sta; //保存每个点的状态 ...原创 2022-04-27 10:21:40 · 321 阅读 · 0 评论 -
39. 组合总和
原题链接:39. 组合总和solution: dfs深度优先搜索class Solution {public: vector<vector<int>> res; //定义返回值 vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<int> path;...原创 2022-04-24 10:13:54 · 104 阅读 · 0 评论 -
22. 括号生成
原题链接:22. 括号生成solution:dfs+回溯可以观察到一个性质,左括号数量永远大于等于右括号数量然后就是一道简的dfs问题了class Solution {public: vector<string> res; //定义返回值 vector<string> generateParenthesis(int n) { string str = ""; //保存单个有效括号字符串 dfs(0,0,n.原创 2022-04-23 10:51:06 · 258 阅读 · 0 评论 -
17. 电话号码的字母组合
原题链接:17. 电话号码的字母组合solution:看到这题,可以想象一下把这个问题抽象成一个树的问题,比如按下的电话号码为“234”,那么号码2所对应的“abc”,就是树的第一层,号码3所对应的“def” ,就是第一层所有根节点的子树....以此类推。 通过这样的分析,本题就转化为树的深度优先遍历,代码如下:class Solution {public: vector<string> res; //定义返回值 //电话字...原创 2022-04-22 10:20:53 · 106 阅读 · 0 评论 -
388. 文件的最长绝对路径
原题链接:388. 文件的最长绝对路径solution:class Solution {public: int lengthLongestPath(string input) { stack<int> st; //栈存的是路径上每个名字的长度,栈的长度表示层数 int sum = 0; //总的名字的长度 int res = 0; //最大长度 for(int i = 0;i < inp.原创 2022-04-20 14:20:56 · 207 阅读 · 0 评论 -
385. 迷你语法分析器
原题链接:385. 迷你语法分析器solution:利用深度优先搜索/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Constructor initiali.原创 2022-04-15 13:05:09 · 108 阅读 · 0 评论 -
98. 验证二叉搜索树
原题链接:98. 验证二叉搜索树solution: 可以对二叉搜索树进行中序遍历,如果得到的数组是升序数组,就一定是二叉搜索树//递归的方式class Solution {public: vector<int> res; //保存中序遍历数组 void inorderTraversal(TreeNode *root) //二叉树中序遍历 { if(root == nullptr) return; if(roo..原创 2022-03-28 15:57:59 · 126 阅读 · 0 评论 -
102. 二叉树的层序遍历
原题链接:102. 二叉树的层序遍历solution: bfs搜索/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) ...原创 2022-03-25 12:04:30 · 62 阅读 · 0 评论 -
104. 二叉树的最大深度
原题链接:104. 二叉树的最大深度solutiion: DFS/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) ...原创 2022-03-25 10:35:02 · 346 阅读 · 0 评论 -
784. 字母大小写全排列
原题链接:784. 字母大小写全排列solution:class Solution {public: vector<string> res; void dfs(string& s,string& path,int i) { if(i == s.size()){ res.push_back(path); return; } if(!isdigit.原创 2022-03-24 16:28:51 · 105 阅读 · 0 评论 -
46. 全排列
原题链接:46. 全排列solution:class Solution {public: vector<vector<int>> res;//储存所有全排列 vector<int> path; //储存一个全排列 unordered_set<int> hash; void dfs(int n,vector<int>& nums) { if(path.size() ==.原创 2022-03-24 14:05:15 · 121 阅读 · 0 评论 -
77. 组合
原题链接:77. 组合solution:class Solution {public: vector<vector<int>> res; vector<int> path; bool sta[22]; void dfs(int n,int k,int start) { if(path.size() == k){ res.push_back(path); r.原创 2022-03-24 13:15:26 · 113 阅读 · 0 评论 -
542. 01 矩阵
原题链接:542. 01 矩阵solution: 本题是一道多源bfs,首先把每个0的点保存到队列进行宽搜,逐一更新距离class Solution {public: typedef pair<int,int> PII; int dx[4] = {-1,0,1,0}, dy[4] = {0,-1,0,1}; vector<vector<int>> bfs(vector<vector<int>>...原创 2022-03-23 14:35:10 · 121 阅读 · 0 评论 -
994. 腐烂的橘子
原题链接:994. 腐烂的橘子solution:class Solution {public: typedef pair<int,int> PII; int dx[4] = {-1,0,1,0},dy[4] = {0,-1,0,1}; //四个方向 int bfs(vector<vector<int>>& grid) //宽度优先搜索 { int n = grid.size(); .原创 2022-03-23 13:10:05 · 327 阅读 · 0 评论 -
695. 岛屿的最大面积
原题链接:695. 岛屿的最大面积solution:class Solution { public: int m,n; int count=0; int dfs(vector<vector<int>> & grid,int x,int y) { if(x<0 || y<0 || x==m || y==n || grid[x][y]==0) return 0; grid[x][y]..原创 2022-03-20 14:19:51 · 80 阅读 · 0 评论 -
733. 图像渲染
原题链接:733. 图像渲染solution:一道深度优先搜索题,关键是看懂题目,只有和最开始那个点颜色相同的,上下左右相邻的才能被染色,并且还需要加一个特判染色的格子如果等于要染的颜色就退出。class Solution {public: void dfs(vector<vector<int>>& image, int sr, int sc, int newColor,int oldColor) { if(sr<0 || .原创 2022-03-20 12:12:24 · 876 阅读 · 2 评论