LeetCode
想想这道菜要怎么做
这个作者很懒,什么都没留下…
展开
-
中序遍历序列与前序遍历序列构造二叉树
后序遍历序列的不同在于取的是序列的最后一位。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode原创 2020-10-04 14:55:06 · 143 阅读 · 0 评论 -
N皇后问题
经典回溯,以一个棋盘为例,棋盘的一行代表决策树的一个层次,棋盘某一行上的一列代表一个选择,做出选择,进入递归,撤销选择,这就是回溯的模板。正如labuladong大佬总结的:递归结束的条件就是做出的选择达到决策树的叶子,将路径计入结果。选择列表中做选择,一系列选择构成路径。class Solution { bool isValid(vector<string>& track, int row, int col, int n){ //同一列上没有 .原创 2020-09-18 09:52:47 · 119 阅读 · 0 评论 -
2020-09-16
做到关于全排列的一道题,搜了一点关于C++next_permutation()函数的知识。原理:https://blog.csdn.net/QQ575787460/article/details/41215475用法:https://blog.csdn.net/qq_33164724/article/details/104175884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.c原创 2020-09-16 22:28:24 · 103 阅读 · 0 评论 -
回溯法,括号生成
回溯简单点看也就是深度优先搜索,在递归之前做出选择,递归之后撤销选择。就比如LeetCode上的这道括号生成,n对括号,给出所有合法的括号字符串组合。//暴力求解:class Solution { //合法的条件是,任意子串的左括号数量不会少于右括号的数量 bool isValid(const string& s){ int balance=0; for(char iter : s){ if(iter == '(')原创 2020-09-16 20:37:06 · 232 阅读 · 0 评论 -
bfs拓扑排序,课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: false解释.原创 2020-09-10 20:36:38 · 110 阅读 · 0 评论 -
bfs锯齿形层序遍历
上一篇再加一个条件:先从左往右,再从右往左。。以此类推/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vec原创 2020-09-07 20:21:28 · 62 阅读 · 0 评论 -
bfs二叉树层序遍历
要注意的是二维vector的操作。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<ve.原创 2020-09-07 19:20:08 · 120 阅读 · 0 评论 -
bfs打开转盘锁
转盘锁有四位,每位10个数字,每次只能转一位,而且转的过程中不能出现deadends中的情况,求出最后转几步才能的出target。一串字符串往上往下拨一位会有8种情况,相当于一个节点有8个邻接节点,在这么一个图中,只有一个终点,而且有的节点是不能用的,题目最后转换成BFS求最短路径。而DFS求最短路径需要遍历整张图之后,保存所有的结果在选出最优的,在时间上已经败了。求最短路径的时候,要避免走重复的路,所以要记录已经走过的路,基于这一点,可以把那些deadends条件的节点当成已经走过的路,省的另开空.原创 2020-09-07 16:49:59 · 94 阅读 · 0 评论 -
用并查集判断图的连通性
最近写代码遇到一个问题。如图一个3*3*3的Cube当两个立方体之间共享一个面,称为面邻居(R-6);当两个立方体仅共享一条边,称为边邻居(R-18);仅共享一个点,称为点邻居(R-26)。在细化骨架的算法中,判断一个体素是否为简单体素的时候要判断,删除体素前后欧拉示性数、连通分量数是否发生改变。这个连通分量数,把立方体当成图中的点,两个立方体之间点相邻代表他们之间有边,可以转换成图深搜、广搜去判断没有中心体素前后的连通分量数。在体网格模型里,从点邻接关系独立抽出中心体素的R-26有点麻烦,所以改变角度,原创 2020-08-20 21:43:46 · 740 阅读 · 0 评论