算法----搜索
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
LeetCode 518. 零钱兑换 II
Description给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins原创 2020-09-16 15:39:02 · 184 阅读 · 0 评论 -
LeetCode 79. 单词搜索
Description给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word =原创 2020-09-13 10:32:45 · 105 阅读 · 0 评论 -
LeetCode 216. 组合总和 III
Description找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinatio原创 2020-09-11 10:35:37 · 119 阅读 · 0 评论 -
LeetCode 40. 组合总和 II
Description给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]原创 2020-09-10 16:04:14 · 183 阅读 · 0 评论 -
LeetCode 77. 组合 (回溯)
Description给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。Solutionclass Solut原创 2020-09-08 16:29:55 · 164 阅读 · 0 评论 -
LeetCode 474. 一和零
Description在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。示例 1:输入: Array = {"10", "0001", "111001", "1", "0"}原创 2020-09-06 14:51:36 · 152 阅读 · 0 评论 -
LeetCode 60. 第k个排列
Description给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: "213"示例 2:输入: n = 4, k = 9输出: "2314"来源:力扣原创 2020-09-06 14:48:18 · 170 阅读 · 0 评论 -
LeetCode 90. 子集 II
Description给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。Solution注意相对于原创 2020-09-04 20:58:40 · 108 阅读 · 0 评论 -
LeetCode 78. 子集
Description给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出原创 2020-09-04 20:26:23 · 195 阅读 · 0 评论 -
LeetCode491. 递增子序列 (子集变形)
Description给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/increasing-subsequences著作权归领扣网络所有。商业转载请联系官方授原创 2020-09-04 17:48:25 · 164 阅读 · 0 评论 -
LeetCode 301. 删除无效的括号 (BFS)
Description删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:输入: ")("输出: [""]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-inva原创 2020-09-04 11:27:07 · 230 阅读 · 0 评论 -
LeetCode 剑指 Offer 38. 字符串的排列 (回溯)
Description输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。Solution注意排除原创 2020-09-03 11:01:33 · 184 阅读 · 0 评论 -
LeetCode 39. 组合总和 (回溯)
Description给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。 示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例 2:输入:candidates = [2,3原创 2020-09-02 15:57:52 · 190 阅读 · 0 评论 -
LeetCode 63. 不同路径 II (动态规划或者回溯)
Description一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:3x3 网格的正中间原创 2020-07-06 12:39:46 · 206 阅读 · 0 评论 -
LeetCode 130. 被围绕的区域(BFS或者并查集)
Description给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'原创 2020-07-05 23:15:51 · 227 阅读 · 0 评论 -
LeetCode 62. 不同路径(回溯、动态规划)
Description一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右原创 2020-07-03 16:47:13 · 341 阅读 · 0 评论 -
LeetCode 127. 单词接龙(BFS)
Description给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord = "hit"原创 2020-06-07 12:04:03 · 278 阅读 · 0 评论 -
面试金典 面试题13. 机器人的运动范围 (BFS)
Description地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。...原创 2020-04-08 20:08:50 · 232 阅读 · 0 评论 -
LeetCode 1162. 地图分析(BFS)
Description你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之...原创 2020-03-29 10:41:11 · 332 阅读 · 0 评论 -
Leetcode 994. 腐烂的橘子(BFS模板题)
Description在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入...原创 2020-03-04 21:29:19 · 304 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。Solution借助队列的BFS。class Solution: def PrintFromTopToBottom(self, root): if root is None: return [] res = [] queue = [root] ...原创 2019-08-17 11:38:48 · 97 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)SolutionDFS找路径,注意进入递归前空指针的判断。class Solution: def __init__(self): self.ans = []...原创 2019-08-17 17:07:24 · 86 阅读 · 0 评论 -
剑指offer 矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占...原创 2019-08-30 10:23:09 · 121 阅读 · 0 评论 -
剑指offer 机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?SolutionBFS,时间复杂度未通过,...原创 2019-08-30 16:04:29 · 147 阅读 · 0 评论 -
HRBUST - 1143 泉水 (简单DFS)
descriptionLeyni是一个地址调查员,有一天在他调查的地方突然出现个泉眼。由于当地的地势不均匀,有高有低,他觉得如果这个泉眼不断的向外溶出水来,这意味着这里在不久的将来将会一个小湖。水往低处流,凡是比泉眼地势低或者等于的地方都会被水淹没,地势高的地方水不会越过。而且又因为泉水比较弱,当所有地势低的地方被淹没后,水位将不会上涨,一直定在跟泉眼一样的水位上。 由于Leyni已经...原创 2018-03-28 14:35:25 · 456 阅读 · 0 评论 -
tony's tour
tony’s tourA square township has been divided up into n*m(n rows and m columns) square plots (1<=N,M<=8),some of them are blocked, others are unblocked. The Farm is located in the lower left plot and t原创 2017-05-15 20:57:16 · 355 阅读 · 0 评论 -
牛客网 玛雅人的密码(BFS、清华机试)
题目描述玛雅人有一种密码,如果字符串中出现连续的2012四个数字就能解开密码。给一个长度为N的字符串,(2=<N<=13)该字符串中只含有0,1,2三种数字,问这个字符串要移位几次才能解开密码,每次只能移动相邻的两个数字。例如02120经过一次移位,可以得到20120,01220,02210,02102,其中20120符合要求,因此输出为1.如果无论移位多少次都解不开密码,输出-1。...原创 2019-03-14 15:12:02 · 208 阅读 · 0 评论 -
HDU - 1241 Oil Deposits(DFS板题)
Description多组案例,每组案例输入一个m行n列的字符矩阵,统计字符‘@’组成多少个连通块。如果两个字符‘@’所在的格子相邻(横、竖或对角线),则说明它们属于同一连通块。Input输入行n列m,接下来输入地图,n和m为0结束输入。Output输出有几个联通快,斜着联通也算是一个联通快。SolutionDFS板题。#include <iostream>using...原创 2019-01-22 22:02:51 · 154 阅读 · 0 评论 -
UVA 524 素数环(DFS枚举+剪枝)
Discription输入正整数n,把整数1,2…,n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。Inputn (0 < n ≤ 16)Output如实例输出,注意中间有空行,最后一行没有空行Sample Input6 8Sample OutputCase 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6原创 2017-08-13 17:46:11 · 303 阅读 · 0 评论 -
DFS搜索排列与组合
练习使用DFS搜索12以内的五位数字的排列例如1 2 3 4 51 2 3 4 6...12 11 10 9 712 11 10 9 8主要就是用到一个数组记录访问的状态,利用一个solve()函数存储搜索结果,中间有很多小坑,自己慢慢踩吧,附上本人渣代码。#include <iostream>using namespace std;int num[5] = { 0 }; //存储遍原创 2017-03-15 21:06:04 · 705 阅读 · 0 评论 -
UVA 725 除法(DFS搜索排列)
Description给定一个正整数n,请按照从小到大的顺序输出形如abcde / fghij = n的表达式,其中每个字母代表0~9中的一个数字且每个数字只出现一次。Input有多组输入。 输入的每行仅有一个正整数n,当n为0时表示输入结束。Output对于每组输入按照升序(以分母作为基准)输出abcde / fghij = n,其中abcde和fghij可以包含前导0。注意:/和=的两边都有空原创 2017-08-13 11:44:05 · 483 阅读 · 0 评论 -
HDU 2489 Minimal Ratio Tree(dfs+最小生成树-Prim)
Description定义一棵树的系数ratio=边权和/点权和,现在给出一个n个点的完全图,问其只有m个点的子树的系数最小值 Input多组用例,每组用例第一行输入两个正数n和m,之后输入n个整数val[i]表示第i个点的点权,最后输入一个n*n矩阵A表示该图的邻接矩阵(2<=m<=n<=15,点权边权范围都在[1,100]之间) Output输出系数最小的子树的m个节点,如果有多重方案则输出字典原创 2017-07-26 20:41:09 · 281 阅读 · 0 评论 -
HDU 1312 Red and Black(并查集或者BFS)
Discription给定一个地图,要求从一个@ 点出发输出与此点联通的所有. 的个数。Sample Input6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..原创 2017-07-21 22:53:04 · 238 阅读 · 0 评论 -
HDU 1242 Rescue (DFS+剪枝,一个起点多个终点)
Discription题意:天使被困在监狱,他的朋友们想见他,监狱的地形复杂,包括路(用点标示),墙(用#标示),天使的位置(用a标示),他的朋友(用r标示),监狱里还有守卫(用x标示),他的朋友只能向左右上下四个方向走,走以不花一单位时间,若碰上守卫,消灭守卫需要额外花费一单位时间。问最少多长时间天使能见到他的朋友。Sample Input7 8#.#####.#.a#..r.#..#x...原创 2017-07-21 16:39:48 · 404 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone (DFS+奇偶剪枝,一个起点一个终点)
Description给定一个图的起点begin和终点end以及所需要的时间,X 不能通过,. 可以通过,S 是开始坐标,D 结束坐标,问是否恰好在T秒到达终点。InputThe input consists of multiple test cases. The first line of each test case contains three integers N, M, and T (1原创 2017-07-21 11:33:06 · 399 阅读 · 0 评论 -
DFS搜索联通块
对一个3*4方格进行深度优先搜索联通块#include <iostream>#include <cmath>using namespace std;int m = 3, n = 4, sum = 0;int pic[3][4];bool visit[3][4] = { false };void dfs(int i, int j, int cnt){ if (i < 0 || i >=原创 2017-03-09 21:31:53 · 1053 阅读 · 0 评论 -
李白打酒(DFS小例子)
题目描述:话说大诗人李白,一生好饮。幸好他从不开车。 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目原创 2017-03-12 21:23:27 · 2165 阅读 · 0 评论 -
油田(Oil Deposits, UVa 572)
原题: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/L题意: 多组案例,每组案例输入一个m行n列的字符矩阵,统计字符‘@’组成多少个连通块。如果两个字符‘@’所在的格子相邻(横、竖或对角线),则说明它们属于同一连通块。案例: Sample Input 1 1 * 3 5 *@*原创 2017-03-27 20:48:45 · 522 阅读 · 0 评论 -
UVA 572 油田(BFS)
Discription给定一个包含@ *的二维数组,输出有几个@是联通的,如果一个@在另外一个@相邻的八个方向则视作相邻。Input包含@ *的二维数组。Output输出联通的个数Sample Input1 1*3 5*@*@***@***@*@*1 8@@****@*5 5****@*@@*@*@**@@@@*@@@**@0 0Sample Output0 1 2原创 2017-08-25 10:00:28 · 426 阅读 · 0 评论 -
HDU 6113 度度熊的01世界(简单dfs)
Description度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成。现在给你一个n∗m的图像,你需要分辨他究竟是0,还是1,或者两者均不是。图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围。图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围。连通的含义是,只要连原创 2017-10-29 14:49:52 · 308 阅读 · 0 评论