#回溯深搜
文章平均质量分 51
...
偶尔写博客
偶尔记录下自己的学习情况,我很菜。
展开
-
LCP 07. 传递信息
小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下: 有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0 每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。 每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 ...原创 2022-05-27 17:54:16 · 262 阅读 · 2 评论 -
相同的树(dfs)
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2...原创 2020-08-07 10:46:37 · 190 阅读 · 0 评论 -
二叉树展开为链表(先序遍历dfs)
给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list著作权归领.原创 2020-08-03 00:42:16 · 247 阅读 · 0 评论 -
矩阵中的最长递增路径(dfs+记忆化 )
给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[ [9,9,4], [6,6,8], [2,1,1]]输出: 4解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums =[ [3,4,5], [3,2,6], [2,2,1]]输出: 4解释: 最长递增路径是 [3, 4, 5, 6]。注意不允...原创 2020-07-26 11:55:52 · 309 阅读 · 0 评论 -
除数博弈(dfs+记忆化)
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。...原创 2020-07-24 21:01:08 · 210 阅读 · 0 评论 -
最小路径和(DP / dfs+记忆化)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2020-07-23 18:32:55 · 445 阅读 · 0 评论 -
戳气球(dfs+记忆化 / DP)
有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明: 你可以假设 nums[-1] = nums[n] = 1,但注意它们...原创 2020-07-19 17:19:23 · 223 阅读 · 0 评论 -
判断二分图(染色法+DFS / 并查集)
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。示例 1:输入: [[1,3], [0,2], [1,3],原创 2020-07-17 00:17:04 · 589 阅读 · 0 评论 -
三角形最小路径和(经典DP / dfs+记忆化)
(偷懒中……)给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分来源:力扣(Leet原创 2020-07-15 00:22:29 · 621 阅读 · 0 评论 -
不同路径 II(dfs+记忆化)
一个机器人位于一个 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 23:48:57 · 308 阅读 · 0 评论 -
单词拆分(暴力/回溯)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple...原创 2020-06-26 00:36:30 · 290 阅读 · 0 评论 -
最接近的三数之和(回溯)
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示: 3 <= nums.length <= 10^3 -10^3 <= nums[i] <= ...原创 2020-06-24 22:45:37 · 307 阅读 · 0 评论 -
01背包问题(dfs/DP)
描述一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。格式输入格式第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30); 第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出格式仅一行,一个数,表示最大总价值。样...原创 2020-04-07 23:21:52 · 712 阅读 · 0 评论 -
迷宫(dfs)
描述一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。格式...原创 2020-03-29 23:59:46 · 1327 阅读 · 3 评论 -
过河卒(深搜/动规)
描述棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出卒从A点能...原创 2020-03-28 16:01:00 · 862 阅读 · 0 评论 -
Lake Counting(dfs 深搜/ bfs广搜)
描述有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?格式输入格式第一行为N,M(1≤N,M≤110)。 下面为N*M的土地示意图。输出格式一行,共有的水洼数。样例输入样例10 12W........WW..WWW.....WWW....WW...WW..........WW....原创 2020-03-26 18:22:48 · 728 阅读 · 0 评论 -
活动选择(贪心 / 贪心+回溯深搜)
描述学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。现在给出n个活动使用礼堂的起始时间begini和结束时间endi(begini < endi),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。格式输入格式第一行一个整数n(n≤...原创 2020-03-22 22:07:12 · 493 阅读 · 2 评论 -
LETTERS(回溯深搜)
描述给出一个roe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。格式输入格式第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。 接着输出R行S列字母矩阵。输出格式最多能走过的不同字母的个数。样例输入样例3 6HFDFFBAJHGDHDGAGEH输出样例6限...原创 2020-03-22 01:41:15 · 308 阅读 · 0 评论 -
转进制(递归)
描述用递归算法将一个十进制数X转换成任意进制数M(M≤16)。格式输入格式一行两个数,第一个十进制数X,第二个为进制M。输出格式输出结果。样例输入样例31 16 {将十进制31转化为十六进制数}输出样例1F限制时间限制: 1000 ms内存限制: 65536 KB#include <iostream>#include ...原创 2020-03-16 18:18:59 · 4090 阅读 · 0 评论 -
组合的输出(回溯深搜)
描述排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。格式输入格式一行两个自然数n、r(1 < n < 16,1≤r≤n)。输出格式所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所...原创 2020-03-05 14:34:23 · 592 阅读 · 0 评论
分享