DFS
leagalhigh
never give up!
展开
-
单词搜索
深度优先搜索,回溯法。这种问题就是在函数的开头判断结束和下面的处理函数时要特别注意。还有就是在需要访问过与否的信息时,需要额外的空间,传递的是引用,改为访问过之后还有改为未访问过;这里有一个小技巧可以避免空间的使用,就是存储访问过的变化,改完之后还要改回来。C++代码:class Solution {public: /** * @param board: A list of原创 2017-01-29 21:45:06 · 390 阅读 · 0 评论 -
leetcode-133. Clone Graph
考察点:图,DFS; 思路:就是用一个map记录对应label的node指针,克隆了的话就直接返回指向该node的指针,没有的话就new一个然后再对它进行递归添加节点。这个函数返回的是一个节点,而且该节点的所有neighbors都找全了,所以mp中有的话就直接返回就行。要从宏观角度看这个函数。C++代码:/** * Definition for undirected graph. * stru原创 2017-05-10 09:47:30 · 177 阅读 · 0 评论 -
leetcode-399. Evaluate Division
这道题考察图,dfs; 思路:关键是要用好stl,平时用的下标取double值,但是C++里就要unordered_map来存储,思路还是那样:首先将图初始化,from和to都应该存入mp中(双向的); 然后开始对每一个queries进行dfs;如果有一个query不存在于mp里,就将ret中放入-1.0, 否则说明可以到达,开始dfs:如果from == to 则放入-1.0, continue原创 2017-05-08 22:15:39 · 299 阅读 · 0 评论 -
leetcode-329. Longest Increasing Path in a Matrix
考察点:dfs,dp,memory; 思路:遍历每个节点,用dp存储该节点的最长值;dfs函数返回该节点的最长值,dfs里,如果已经存储,就直接返回,否则就四个方向依次遍历,如果比它小就放弃这条路;最后得出结果就返回最大的。 C++代码:class Solution {public: vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}原创 2017-05-14 11:46:07 · 177 阅读 · 0 评论 -
leetcode-494. Target Sum
考察dp,DFS; 思路:DFS简单,但是时间耗费多;DP算法中,dp[i][j]表示的是前i个数表示总数j的所有可能。运用数组下标映射算法。C++代码: DFS:class Solution {public: int ret; int findTargetSumWays(vector<int>& nums, int S) { ret = 0;原创 2017-04-23 12:03:01 · 407 阅读 · 0 评论 -
leetcode-108. Convert Sorted Array to Binary Search Tree
思路:因为nums是有序对,所以每次将一个区间的中间位置的数插进去得到的二叉树是BST。bug free。C++ 代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNod原创 2017-04-22 16:46:18 · 234 阅读 · 0 评论 -
leetcode-332-Reconstruct Itinerary
这道题考的是DFS、有向图、欧拉路径(一笔画问题)、Hierholzer’s 算法。思路:把问题抽象成一个图,求一笔画路径,还要保持最小序输出,所以应该用multiset存储一个起点的目的地。想到mapclass Solution {public: void dfs(string airport) { while (map1[airport].size()) {原创 2017-04-22 09:10:32 · 488 阅读 · 0 评论 -
leetcode-491. Increasing Subsequences
考察点:dfs; 思路:dfs,对于dfs函数,其中对每一个位置的数都选择选或者不选来判断。最后,用set,将set转化为vector的函数是copy(iter1, iter2, back_inserter(v1));C++代码:class Solution {public: vector<vector<int>> findSubsequences(vector<int>& nums)原创 2017-05-12 10:39:55 · 296 阅读 · 0 评论 -
leetcode-130. Surrounded Regions
这道题见鬼了,为什么我的代码中,dfs()函数里,注释掉的代码可以AC,但是现在的代码跑就是Runtime Error呢?class Solution {public: void dfs(vector<vector<char>> &board, int row, int clo) { int m=board.size(), n = board[0].size();原创 2017-04-14 10:37:33 · 247 阅读 · 0 评论 -
236. Lowest Common Ancestor of a Binary Tree
考察点:DFS; 思路:首先根据一个搜索出到两个指针所指对象的path,存放在vector中,然后反转该vector,前面的元素是从根节点出发的节点路径,找出第一个不同的元素,返回之前的元素就可; C++ 代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNod原创 2017-09-25 14:25:12 · 162 阅读 · 0 评论