DFS
小马哥MAX
刷题记录BLOG
展开
-
【两次过】LeetCode257:二叉树的所有路径
*给定一个二叉树,返回所有从根节点到叶子节点的路径。*说明:叶子节点是指没有子节点的节点。*示例:*输入:*1*/\*23*\*5*输出:["1->2->5","1->3"]*解释:所有根节点到叶子节点的路径为:1->2->5,1->3解题思路:答案要求所有达到根结点的路径的字符串表示,这是一个典型的回溯问题。回溯在于,走到一个叶子结点,要查...原创 2020-09-03 09:51:30 · 126 阅读 · 0 评论 -
【两次过】Leetcode 22. 括号生成
数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]解题思路:这种列出所有结果的题目一般采用dfs。具体见代码解析:class Solution { public List<String> generateP...原创 2020-07-15 08:26:44 · 131 阅读 · 0 评论 -
【一次过】Lintcode 59. 最接近的三数之和
给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和。样例例1:输入:[2,7,11,15],3输出:20解释:2+7+11=20例2:输入:[-1,2,1,-4],1输出:2解释:-1+2+1=2挑战O(n^2) 时间, O(1) 额外空间。注意事项只需要返回三元组之和,无需返回三元组本身...原创 2019-03-31 10:53:20 · 109 阅读 · 0 评论 -
【一次过】Lintcode 90. k数和 II
给定n个不同的正整数,整数k(1<=k <= n)以及一个目标数字。 在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。样例Example 1: Input: [1,2,3,4], k = 2, target = 5 Output: [[1,4],[2,3]]Example 2: Input: [1,3,4,6],...原创 2019-03-31 10:29:12 · 155 阅读 · 0 评论 -
【两次过】Lintcode 34. N皇后问题 II
根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。样例例1:输入: n=1输出: 1解释:1:1例2:输入: n=4输出: 2解释:1:0 0 1 01 0 0 00 0 0 10 1 0 02:0 1 0 0 0 0 0 11 0 0 00 0 1 0解题思路:和Lintcode 33. N皇后问题类似,更加...原创 2019-03-05 10:04:00 · 161 阅读 · 0 评论 -
【三次过】Lintcode 778. 太平洋和大西洋的水流
给定一个m×n的非负矩阵代表一个大洲,矩阵的每个单元格的值代表此处的地形高度,矩阵的左边缘和上边缘是“太平洋”,下边缘和右边缘是“大西洋”。水流只能在四个方向(上,下,左或右)从一个单元格流向另一个海拔和自己相等或比自己低的单元格。找到那些从此处出发的水既可以流到“太平洋”,又可以流向“大西洋”的单元格的坐标。样例例1:输入:matrix = [[1,2,2,3,5],...原创 2019-03-04 11:28:51 · 253 阅读 · 0 评论 -
【两次过】Lintcode 477. 被围绕的区域
给一个二维的矩阵,包含'X'和'O', 找到所有被'X'围绕的区域,并用'X'替换其中所有的'O'。样例样例 1:输入: 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样例 2:输入: X X X X X O O X X O...原创 2019-03-04 10:05:15 · 177 阅读 · 0 评论 -
【两次过】Lintcode 123. 单词搜索
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例给出board =[ "ABCE", "SFCS", "ADEE"]word ="ABCCED", ->返回 true,word ="SEE",-> 返回 ...原创 2019-02-27 10:07:13 · 177 阅读 · 0 评论 -
【两次过】Lintcode 1080. 最大的岛
给定一个由0和1组成的非空二维数组grid,一个岛由一组四联通(上下左右四方向)的1(表示陆地)组成。假定grid的四周都是水。返回最大的岛。(没有岛则返回0)样例样例 1:[[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,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,...原创 2019-02-21 10:40:42 · 262 阅读 · 0 评论 -
【两次过】Lintcode 1666. 组合+判断素数
给定n个整数和一个整数k, 你可以从中选择k个整数, 现在,要求你计算出和为素数共有多少种。样例给定a=[3,7,12,19], k=3, 返回1解释:有4种方案3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34, 只有 29 是素数.给定a=[1,2,3], k=2, 返回2解释:有3种方案1 + 2 = ...原创 2019-03-29 10:06:11 · 492 阅读 · 0 评论 -
【一次过】Lintcode 57. 三数之和
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。样例例1:输入:[2,7,11,15]输出:[]例2:输入:[-1,0,1,2,-1,-4]输出:[[-1, 0, 1],[-1, -1, 2]]注意事项在三元组(a, b, c),要求a <= b <= c。结果不能包含重复的三元组...原创 2019-03-29 10:22:19 · 118 阅读 · 0 评论 -
【一次过】Lintcode 58. 四数之和
给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d)。样例例1:输入:[2,7,11,15],3输出:[]例2:输入:[1,0,-1,0,-2,2],0输出:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]]注意事项四元组(a, b, c, d)中,需要满足a ...原创 2019-03-29 10:39:06 · 145 阅读 · 0 评论 -
【一次过】【2017好未来】求和
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来输入描述:每个测试输入包含2个整数,n和m输出描述:按每个组合的字典序排列输出,每行输出一种组合示例1输入5 5输出1 42 35解题思路:标准dfs解法。import java.util.*;public c...原创 2019-04-12 20:13:21 · 88 阅读 · 0 评论 -
【两次过】二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路:dfsimport java.util.ArrayList;/**public class TreeNode { int val = 0; T...原创 2019-05-01 10:12:47 · 73 阅读 · 0 评论 -
【三次过】【2018招行】寻找合法字符串
给出一个正整数n,请给出所有的包含n个'('和n个')'的字符串,使得'('和')'可以完全匹配。例如:'(())()','()()()' 都是合法的;'())()('是不合法的。请按照__字典序__给出所有合法的字符串。输入描述:输入为1个正整数输出描述:输出为所有合法的字符串,用英文逗号隔开示例1输入2输出(()),()()解...原创 2019-05-16 09:42:17 · 485 阅读 · 0 评论 -
【两次过】机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:从(0,0)点开始dfs,...原创 2019-05-13 10:50:53 · 77 阅读 · 0 评论 -
【两次过】【2018唯品会】字符串组合
输入一个字符串,输出该字符串中相邻字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)(40分)输入描述:一个字符串输出描述:一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重。示例1输入bac输出a b c ac ba bac解题思路1:类似Lintcode 17. 子...原创 2019-05-30 21:10:35 · 138 阅读 · 0 评论 -
【两次过】Lintcode 480. 二叉树的所有路径
480.二叉树的所有路径给一棵二叉树,找出从根节点到叶子节点的所有路径。样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]解题思路1: 分治法。注意需要额外考虑叶子节点的问题,否则叶子节点将会被遗漏,导致输出为空。/** *...原创 2018-07-16 10:11:59 · 157 阅读 · 0 评论 -
【两次过】【坐标型】Lintcode 553. 炸弹袭击
给一个二维矩阵, 每一个格子都可能是一堵墙W, 一个敌人E或者空0(数字 '0'), 返回你可以用一个炸弹杀死的最大敌人数. 炸弹会杀死所有在同一行和同一列没有墙阻隔的敌人, 因为墙比较坚固难以摧毁.样例给一个矩阵:0 E 0 0E 0 W E0 E 0 0返回3.(在(1, 1)处放炸弹可以杀死 3 个敌人)注意事项你只能在空的地方放置炸弹.解题思...原创 2018-10-22 10:07:21 · 351 阅读 · 0 评论 -
【两次过】Lintcode 1479. 能否到达终点
给一个大小为m*n的map,1代表空地,0代表障碍物,9代表终点。请问如果你从(0, 0)开始能否到达终点?样例样例1输入: [ [1,1,1], [1,1,1], [1,1,9]]输出: true样例2输入: [ [1,1,1], [1,0,0], [1,0,9]]输出: false解题思路1:BFSpublic cla...原创 2019-02-19 18:40:02 · 714 阅读 · 0 评论 -
【三次过】Lintcode 1386. 坐缆车
小九来到某地坐缆车,他的钱只能坐一次缆车,所以他想尽量延长坐缆车的时间。已知缆车站分布可以看作是一个n x m的矩阵,每个格点代表缆车站的高度。他可以从任一站点开始坐缆车,缆车只能从矮的高度移动到高的高度,花费1单位的时间。缆车可以朝着八个方向移动。(上下左右、左上、左下、右上、右下)问小九最多能坐多久缆车?样例样例1输入: mat = [ [1,2,3], [4,...原创 2019-02-19 18:29:49 · 402 阅读 · 0 评论 -
【多次过】Lintcode 376. 二叉树的路径和
给定一个二叉树,所有找出路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]解题思路: 此题同样有个与Lintcode 155.二叉树的最...原创 2018-07-15 09:39:30 · 253 阅读 · 0 评论 -
【三次过】Lintcode 33. N皇后问题
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。样例对于4皇后问题存在两种解决的方案:[ [".Q..", // Solution 1 "...Q", "Q...", "...原创 2018-11-14 10:23:16 · 180 阅读 · 0 评论 -
【两次过】Lintcode 15. 全排列
给定一个数字列表,返回其所有可能的排列。样例给出一个列表[1,2,3],其全排列为:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]挑战使用递归和非递归分别解决。注意事项你可以假设没有重复数字。解题思路:排列DFS问题public class Solution {...原创 2018-11-11 10:41:24 · 228 阅读 · 0 评论 -
【三次过】Lintcode 136. 分割回文串
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回s所有可能的回文串分割方案。样例给出 s ="aab",返回[ ["aa", "b"], ["a", "a", "b"]]解题思路:DFS.那么,对原字符串的所有子字符串的访问顺序是什么呢,如果原字符串是 abcd, 那么访问顺序为: a -> b -> c -> d ->...原创 2018-11-11 10:24:33 · 185 阅读 · 0 评论 -
【两次过】Lintcode 16. 带重复元素的排列
给出一个具有重复数字的列表,找出列表所有不同的排列。样例给出列表 [1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]挑战使用递归和非递归分别完成该题。解题思路:与Lintcode 15. 全排列 相比只加了两句话:Arrays.sort(nums) // 排序这样所有重复的数if (i > 0 &&...原创 2018-11-13 09:45:27 · 267 阅读 · 0 评论 -
【一次过】Lintcode 153. 数字组合 II
给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。样例给出一个例子,候选数字集合为[10,1,6,7,2,1,5]和目标数字8 ,解集为:[[1,7],[1,2,5],[2,6],[1,1,6]]注意事项所有的数字(包括目标数字)均为正整数。 元素组合(a1,a2, … ,ak)必须是非降序(ie...原创 2018-11-10 09:42:01 · 121 阅读 · 0 评论 -
【一次过】Lintcode 18. 子集 II
给定一个可能具有重复数字的列表,返回其所有可能的子集样例如果S = [1,2,2],一个可能的答案为:[ [2], [1], [1,2,2], [2,2], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?注意事项子集中的每个元素都是非降序的 两个子集间的顺序是无关紧要的解集中不能包含重复子集解题思路:几乎与Lin...原创 2018-08-13 16:03:35 · 301 阅读 · 0 评论 -
【一次过】Lintcode 17. 子集
描述给定一个含不同整数的集合,返回其所有的子集子集中的元素排列必须是非降序的,解集必须不包含重复的子集您在真实的面试中是否遇到过这个题?是样例如果S = [1,2,3],有如下的解:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?解...原创 2018-08-13 15:55:02 · 238 阅读 · 0 评论 -
【三次过】Lintcode 1353. 根节点到叶节点求和
给定仅包含来自0-9的数字的二叉树,每个根到叶路径可以表示数字。举个例子:root-to-leaf路径1-> 2-> 3,它代表数字123,找到所有根到叶的数的总和样例Example:Input: [1,2,3] 1 / \ 2 3Output: 25Explanation:The root-to-leaf path 1->2 repre...原创 2018-12-31 10:39:53 · 335 阅读 · 0 评论 -
【一次过】Lintcode 433:岛屿的个数
给一个01矩阵,求不同的岛屿的个数。0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。样例在矩阵:[ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]]中有3个岛.解题思路:...原创 2018-06-18 17:08:40 · 298 阅读 · 0 评论 -
【一次过】Lintcode 153. 数字组合 II
给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。样例给出一个例子,候选数字集合为[10,1,6,7,2,1,5]和目标数字8 ,解集为:[[1,7],[1,2,5],[2,6],[1,1,6]]注意事项所有的数字(包括目标数字)均为正整数。 元素组合(a1,a2, … ,ak)必须是非降序(ie...原创 2019-02-24 22:14:20 · 237 阅读 · 0 评论 -
【两次过】Lintcode 135. 数字组合
给出一个候选数字的set(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。样例给出候选set[2,3,6,7]和目标数字7返回[[7],[2,2,3]]注意事项所有的数字(包括目标数字)均为正整数。 元素组合(a1,a2, … ,ak)必须是非降序(ie,a1≤a2≤ … ≤ak)。 解集不能包含重复的组合。...原创 2019-02-24 22:02:45 · 258 阅读 · 0 评论 -
【一次过】Lintcode 152. 组合
组给出两个整数n和k,返回从1......n中选出的k个数的组合。样例例如 n = 4 且 k = 2返回的解为:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]注意事项不需要在意组合的顺序,但是你应该确保组合中的数字是有序的解题思路:标准DFS解法public class Solution { /** * @par...原创 2019-02-24 21:25:23 · 217 阅读 · 0 评论 -
DFS解题套路总结
一、组合问题题目要求的结果是当前排列的分割!对于长度为n的数组,我们需要依次确认每个位置上的元素。初始问题:从a[0]开始依次确认n个元素。如果我们确认a[0]之后,问题就变成从a[1]开始从剩余元素中选择一个元素确定a[1]。每次选择都有多种可能性,我们依次尝试(尝试后还原),并递归解决选择之后的产生的子问题,并定义出口。例如给出初始集合[1, 2, 3],则结果应该是[1, 2, 3...原创 2019-02-23 10:28:01 · 1482 阅读 · 0 评论 -
【三次过】Lintcode 426. 恢复IP地址
给一个由数字组成的字符串。求出其可能恢复为的所有IP地址。(你的任务就是往这段字符串中添加三个点, 使它成为一个合法的IP地址. 返回所有可能的IP地址.)样例样例 1:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]解释: ["255.255.111.35", "255.255.11.135"] 同样可以....原创 2019-02-22 21:26:53 · 525 阅读 · 1 评论 -
【两次过】Lintcode 425. 电话号码的字母组合
给一个不包含'0'和'1'的数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。下图的手机按键图,就表示了每个数字可以代表的字母。1 2 ABC 3 DEF 4GHI 5JKL 6MNO 7PQRS 8TUV 9WXYZ 样例样例 1:输入: "23"输出: ["ad", "ae", "af", "bd", ...原创 2019-02-22 20:19:59 · 321 阅读 · 0 评论 -
【一次过】Lintcode 897. 海岛城市
给一个n x m的矩阵,矩阵的值有0、1、2,0代表海,1代表海岛,2代表海岛上的城市(你可以看做2是建立在1的上面,即2也也同时代表海岛)。如果2个1相邻,那么这两个1属于同一个岛。现在求至少有一个城市的海岛个数。样例样例1输入: [[1,1,0,0,0],[0,1,0,0,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,0,0,1]]输出: 0...原创 2019-02-17 22:02:53 · 251 阅读 · 0 评论 -
【一次过】Lintcode 135. 数字组合
给出一个候选数字的set(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:[7],[2,2,3]样例给出候选set[2,3,6,7]和目标数字7返回[[7],[2,2,3]]注意事项所有的数字(包括目标数字)均为正整数。 元素组合(a1,a2, … ,...原创 2018-11-09 10:46:16 · 361 阅读 · 0 评论