
回溯
文章平均质量分 57
潇与上海
电科新生在读
展开
-
DFS的若干问题
32->左31,31->下41,...,41->下51,51->右52,52->右53,53->上43。回溯到 22时,22->左,...,22->左21,21->下31...,...,53->上43。回溯到24时,24->上14(左边被标记为已访问的,所以顺时针的左失败了,到了上)12->下22,22->右23,23->右24,24->右25越界,回退到24。24->下34,34->右35越界,回退到34。34->下44,44->右45越界,回退到44。回退到22,22->下32,32->右下失败。原创 2024-02-17 05:01:04 · 736 阅读 · 0 评论 -
P8690 [蓝桥杯 2019 国 B] 填空问题~
A。原创 2024-02-21 21:57:27 · 786 阅读 · 0 评论 -
P1747 好奇怪的游戏~
爱与愁的故事第三弹·shopping》娱乐章。调调口味来道水题。原创 2024-02-21 22:11:39 · 950 阅读 · 0 评论 -
[蓝桥杯练习题]查找两个总和为特定值的索引
【代码】[蓝桥杯练习题]查找两个总和为特定值的索引。原创 2024-03-17 01:11:48 · 445 阅读 · 0 评论 -
【蓝桥杯】递推与递归
这种方法可以将复杂的计算过程转化为简单的重复步骤,充分利用计算机在运行程序时的时间局部性和空间局部性。一种自顶向下的算法,它通过不断地直接或间接调用自身的函数,通过每次改变变量完成多个过程的重复计算,直到到达边界之后,结束调用。分治策略,即分而治之,将复杂过程分解为规模较小的同类问题,通过解决若干个小问题,进而解决整个复杂问题。递推关系避开了求通项公式的麻烦,尤其是对于那些难以或无法求解通项公式的题目;根据题目确定数据项,并找到符合要求的递推关系式;找到递归公式,即能够将大问题转化为小问题的公式;原创 2024-02-26 23:16:57 · 477 阅读 · 0 评论 -
[蓝桥杯练习]N皇后问题
【代码】[蓝桥杯练习]N皇后问题。原创 2024-03-25 09:34:53 · 392 阅读 · 0 评论 -
数字三角形问题
请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。a[1][1] 为题目所求答案,即第一层到第 N 层的最大值。三角形中的数字为 0,1,…无论是递推和递归的关键在于找到关系式。一步可沿左斜线向下或右斜线向下走;递推算法有正推和逆推两种方式。三角形行数小于等于 100;如下所示为一个数字三角形。测试数据通过键盘逐行输入。最大运行内存:128M。原创 2024-02-26 23:25:42 · 399 阅读 · 0 评论 -
LeetCode51. N 皇后[困难]
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。解释:如上图所示,4 皇后问题存在两个不同的解法。二维集合问题,但仍然单层回溯。输出:[[“Q”]]原创 2024-02-01 01:13:00 · 414 阅读 · 0 评论 -
LeetCode37. 解数独[困难]
而返回结果集则通常需要一个路径数组(一维)和一个路径集数组(二维),每条路径都是一个答案,搭配两处push,ans.push(path),path.push(arr[i]);再难的题逐步划分问题就简单了->暴力for枚举答案,然后是否是答案的组成结点自己写一个针对结点的判断函数,暴力for可以解答,但for太多了n个for,则递归。返回一个结果,则是bool类型,即搜到了一个结果就向上返回,即返回当前答案树枝,而不需要递归其它的树枝了。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。原创 2024-02-01 01:05:42 · 1005 阅读 · 0 评论 -
LeetCode491. 非递减子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。输入:nums = [4,4,3,2,1]去重+结点判断(答案长度,答案单调性)输入:nums = [4,6,7,7]输出:[[4,4]]原创 2024-01-31 04:19:49 · 501 阅读 · 0 评论 -
LeetCode90. 子集 II
每次递归都新声明一个set,表示在每个树节点处维护一个hash表,树的深度间(递归深度)不会影响,即纵向不会影响彼此,也不会树枝去重,但是宽度间,即同层的节点,横向会去重,因为每一层都维护同样一个hash表,除非相同发生在纵向,不然则在横向上需要树宽去重,即for去重(continue);给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]输入:nums = [1,2,2]输出:[[],[0]]原创 2024-01-31 03:45:59 · 389 阅读 · 0 评论 -
LeetCode93. 复原 IP 地址/LCR 087. 复原 IP 地址
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。你可以按任何顺序返回答案。输出:[“10.20.30.40”,“102.0.30.40”,“10.203.0.40”]输出:[“255.255.11.135”,“255.255.111.35”]输出:[“0.10.0.10”,“0.100.1.0”]输入:s = “0000”输入:s = “1111”原创 2024-01-31 02:43:11 · 495 阅读 · 0 评论 -
LeetCode131. 分割回文串
以a/a/b开头的答案结束,以a/a开头的答案结束,以a/开头的答案结束_____逐步回溯。我第一刀切在第一个a处,(因为满足条件),后续所有的刀都以前一刀为基础向后切割。如果起终点间形成的区间满足条件,则照着终点切割,形成的切割区间即子串加入路径。再for++,将切割点后移,然后开始答案数组的第二个元素,即路径的制造。输出:[[“a”,“a”,“b”],[“aa”,“b”]]每一轮传入切割区间的新起点,再由该轮的i++控制终点。a/a/b/a/a/c加入答案数组。回溯到第一刀位置,后移,满足,切割。原创 2024-01-31 01:53:44 · 440 阅读 · 0 评论 -
LeetCode40. 组合总和 II
1.递归去重:(去重复下标,不在同一下标取值)任意集合只要不可重复选取当前位置元素时就要应用,但并不保证是否组合有重复元素,因为集合可能本身含重复值,体现在。1.特判去重:(去除重复组合,哪怕来自不同下标),必须是含重复值的集合并且该集合要求返回的组合间不能相同.输入: candidates = [10,1,2,7,6,1,5], target = 8,输入: candidates = [2,5,2,1,2], target = 5,重复集合不可重复选取每个位置上的数字(深度去重中的递归去重)原创 2024-01-30 23:52:57 · 656 阅读 · 0 评论 -
LeetCode17. 电话号码的字母组合
多个集合间的组合问题,首先看集合间存在搭配问题与否,如果不需要,实质处理的还是单个集合的回溯组合问题,只是多个集合需要拿完才能开始ans.push.path。输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。digits[i] 是范围 [‘2’, ‘9’] 的一个数字。输入:digits = “23”输出:[“a”,“b”,“c”]输入:digits = “2”输入:digits = “”原创 2024-01-30 01:53:04 · 399 阅读 · 0 评论 -
LeetCode216. 组合总和 III
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。宽度剪枝:集合大小-(给定组合大小-已有组合大小)+1…返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。输出: [[1,2,6], [1,3,5], [2,3,4]]输入: k = 3, n = 7。输入: k = 3, n = 9。输入: k = 4, n = 1。输出: [[1,2,4]]解释: 不存在有效的组合。没有其他符合的组合了。原创 2024-01-30 00:43:28 · 439 阅读 · 0 评论