![](https://img-blog.csdnimg.cn/ba53be2fd30d4373b2d21f791462b29d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
回溯法
文章平均质量分 64
回溯法专题
zzu菜
努力努力在努力!
展开
-
回溯算法理论基础
回溯算法理论基础#题目分类大纲如下:#什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。#回溯法的效率回溯法的性能如何呢,这里要和大家说清楚了,虽然回溯法很难,很不好理解,但是回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们原创 2022-04-25 20:51:31 · 129 阅读 · 0 评论 -
一题理解回溯算法
先阅读此题 -46.全排序I给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]我们尝试在纸上写 33 个数字、44 个数字、55 个数字的全排列,相信不难找到这样的方法。以原创 2022-04-25 21:03:59 · 175 阅读 · 0 评论 -
474.一和零
474.一和零给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。其他满足题原创 2022-06-20 09:29:27 · 144 阅读 · 0 评论 -
494. 目标和
给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-1 +原创 2022-06-19 16:52:43 · 97 阅读 · 0 评论 -
47. 全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]其实这一题主要是利用回溯法剪支去重。其实这个思路和491. 递增子序列的去重思路是大致相同的,去除同一层其前一个节点与该节点相同的情况:原创 2022-06-01 16:06:05 · 82 阅读 · 0 评论 -
491. 递增子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:**输入:**nums = [4,4,3,2,1]输出:[[4,4]]提示:这里使用回溯法。主要面临两个问题举例:求原创 2022-06-01 10:12:10 · 157 阅读 · 0 评论 -
78. 子集
78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素原创 2022-05-17 19:26:28 · 63 阅读 · 0 评论 -
93. 复原 IP 地址
93. 复原 IP 地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重原创 2022-05-04 16:18:59 · 376 阅读 · 0 评论 -
131.分割回文串
分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例 2:输入:s = “a”输出:[[“a”]]思考本题这涉及到两个关键问题:切割问题,有不同的切割方式判断回文相信这里不同的切割方式可以搞懵很多同学了。这种题目,想用for循环暴力解法,可能都不那么容易写出来,所以要换一种暴力的方原创 2022-04-28 16:03:59 · 1155 阅读 · 0 评论 -
40. 组合总和 II
组合总和 II给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]示例 2:输入: candidates = [2,5,2.原创 2022-04-27 18:08:44 · 159 阅读 · 0 评论 -
回溯算法中使用break和continue的个人理解
回溯算法回溯算法,其实也是暴力解法,穷举法,并不是什么特别高效的算法,其获取所有解。一个回溯问题,其实都可以画成树状结构。void backtracking(参数) { // 剪节点下支 if(剪支条件) return; if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { // 遍历当前层 // 剪节点右并列支 if(原创 2022-04-27 18:05:37 · 366 阅读 · 0 评论 -
39. 组合总和
39. 组合总和给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], tar原创 2022-04-27 16:05:37 · 119 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]思考第一步 获取digits对应的原创 2022-04-27 09:33:49 · 79 阅读 · 0 评论 -
216. 组合总和 III - 回溯法
组合总和 III找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]解释:1 + 2 + 4 = 7没有其他符合的组合了。示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解释:1 + 2 + 6 = 91 + 3 + .原创 2022-04-26 16:10:19 · 220 阅读 · 0 评论 -
77. 组合 回溯法
77. 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]思考首先,这题是个求所有解问题- 回溯法。注意:[3,1][1,3]算一个。假设n=4,k=2时,回溯问题都可以抽象成树状结构如下图。回溯所需要的参数有int s原创 2022-04-26 10:23:59 · 389 阅读 · 0 评论