dfs
文章平均质量分 54
ZhangyiA*
菜鸟学刷题
展开
-
针对组合、子串问题总结
第一次写总结性文章,写的不好望谅解。通过刷了一遍力扣中 组合问题 和 集合子集 问题发现了一些共同的特点。主要分为两类1、原数组 nums 中是否包含重复元素 。2、最终解 result 中是否允许重复取某一个元素 。第一类:(1)、原数组 nums 中 包含重复元素这对这种情况,只需通过剪枝,把重复解剪掉,void backtracking(){ pos1: 存放结果 if (终止条件) { pos2: 存放结果; return; }原创 2021-05-04 22:04:41 · 281 阅读 · 0 评论 -
力扣:组合总和 (系列,先看此篇)
题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数 , 且解集不能包含重复的组合。来源 力扣:39 组合总和参考大佬 liweiwei1494 的题解输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]题目分析以下给出转载 2020-12-07 15:31:59 · 427 阅读 · 0 评论 -
11223344 问题 (阿里面试,说思路)
题目描述给你一个整数 n , 你可以得到一个序列, 该序列是由 1 - n 组成的, 且每个数字出现两次 ;n = 4 , 11223344将其排列,要求结果满足:两个 1 之间有一个数,两个 2 之间有两个数,两个 3 之间有三个数,两个 4 之间有四个数。问这个结果是多少?题目分析参考思路这道题不让写代码,要求动笔算,实际就是模拟暴搜的过程。我分享一个我面试时使用的思路,不一定最优。我们可以想象成有 8 个空格子,依次往里填数字,填的时候满足题目的要求,最终得到的结果便是问题的答案转载 2021-09-10 18:38:28 · 1604 阅读 · 2 评论 -
力扣:全排列序列 (树层、树枝剪枝详解)
题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。力扣:46. 全排列输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]排列问题,每次都需要从头开始搜索,因为 [ 1 , 2 ] 和 [ 2 , 1 ] 是两种排列情况,因此与 组合总和 、 子集问题 最大的不同就是 for 循环中不再是用 startIndex ,而是每次都需要从 原数组 0 开始遍历 , 如果还是前两问题的做法,必然转载 2021-05-05 10:35:30 · 715 阅读 · 0 评论 -
力扣:组合总和 II
题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数 , 解集不能包含重复的组合。力扣:40 组合总和 II输入: candidates = [2,5,2,1,2], target = 5,所求解集为:[[1,2,2],[5]]题目分析此题和 组合总和 不一样的地方在于, candidates原创 2020-12-07 15:55:32 · 221 阅读 · 1 评论 -
力扣:组合总和 III
题目描述找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数 ,解集不能包含重复的组合。力扣:216 组合总和输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]经过了前两个题的铺垫,这道题就很容易理解了,这里的 candidates = {1 ,2 ,3 , , ,9} 已经有序,且不重复。直阶上代码了 奥利给。AC代码:class Solution {原创 2020-12-07 16:13:26 · 199 阅读 · 0 评论 -
力扣:集合的子集
题目描述给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。输入:nums = [ 1 , 2 , 3 ]输出:[ [ ] , [ 1 ] , [ 2 ] , [ 1 , 2 ] , [ 3 ] , [ 1 , 3 ] , [ 2 , 3 ] , [ 1 , 2 , 3 ] ]力扣:78.子集如果有了 组合总和 系列刷题经历,此题就大同小异,无非就是排序,此题中加入到 结果集 result 中的原创 2021-05-04 20:54:16 · 340 阅读 · 0 评论 -
力扣:集合的子集 II
题目描述给你一个整数数组 nums ,其中可能 包含重复元素 ,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。输入: [ 4 , 4 , 4 , 1 , 4 ]输出: [ [ ] , [ 1 ] , [1 , 4 ] , [ 1 , 4 , 4 ] , [ 1 , 4 , 4 , 4 ] , [1 , 4 , 4 , 4 , 4 ] , [ 4 ] , [ 4 , 4 ] , [ 4 , 4 , 4 ] , [ 4 , 4 , 4 ,原创 2021-05-04 21:09:29 · 186 阅读 · 0 评论 -
力扣:分割回文串
题目描述给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。输入:s = “aab”输出:[ [ “a” , “a” , “b” ] , [ “aa” , “b” ] ]如果有了 组合总和 系列刷题经历,此题就大同小异 ,(图片来源:)class Solution { List<List<String>> result = new ArrayList<>原创 2021-05-04 20:15:04 · 169 阅读 · 0 评论 -
力扣:被围绕的区域
题目描述给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:input outputX X X X X X X XX O O X X X X X X X O X X X X XX O X X X O X X这题很容易理解,只需要从矩阵的四个边的 O 开始进行 dfs ,并将 O 更改为其他字符(例如 B ),目的是为了区别被 X 包围的 O ,后期只需要将原创 2020-12-05 22:21:56 · 219 阅读 · 0 评论 -
力扣529:扫雷游戏
题目描述给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:如果一个地雷(‘M’)被挖出,游戏就结束了- 把它改为 ‘X’。如果一个没有相邻地雷的空方块原创 2020-12-02 21:57:15 · 106 阅读 · 0 评论 -
NC:食物链
题目描述如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3…am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 。NC:HAOI2016 食物链输入描述:第一行两个整数n和m,接下来m行每行两个整数ai,bi描述m条能量流动关系。 (数据保证输入数据符号生物学特点,且不会有重复的能量流动原创 2021-01-06 22:02:35 · 1039 阅读 · 0 评论 -
NC15107 石油采集(dfs)
题目描述随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业。如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光。这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形。(上下相邻或者左右相邻的格子,不能斜着来)当然,这要求一瓢撇过去的全部是油,如果一瓢里面有油有水的话,那就毫无意义了,资源完全无法利用。现在,商人想要知道,在这片区域中,他可以最多得到多少瓢油。地图是一个N×N的网络,每个格子表示10m×10m的正方形区域,每个区域都被标示上了是油还是水原创 2020-12-03 20:59:23 · 343 阅读 · 0 评论