回溯算法
该专栏主要是一些关于回溯算法的题解
jump_into_zehe
这个作者很懒,什么都没留下…
展开
-
目标和
LeetCode 494目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3原创 2020-12-04 15:51:42 · 140 阅读 · 0 评论 -
戳气球
LeetCode 312戳气球有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 原创 2020-08-02 23:30:16 · 136 阅读 · 0 评论 -
单词搜索--回溯算法
LeetCode单词搜索给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入: words = ["oath","pea","eat","rain"] and board =[ ['o','a','a','n'], ['e','t','a','e'],原创 2020-07-21 16:48:21 · 498 阅读 · 0 评论 -
格雷编码--回溯算法
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 - 211 - 3原创 2020-07-20 19:28:27 · 272 阅读 · 0 评论 -
单词拆分Ⅱ--回溯算法和动态规划
LeetCode单词拆分Ⅱ给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = “catsanddog”wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]输出:[ “cats and dog”, “cat原创 2020-07-20 14:52:36 · 231 阅读 · 0 评论 -
面试题 08.12. 八皇后--回溯算法
LeetCode面试题 08.12. 八皇后设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。注意:本题相对原题做了扩展示例:输入:4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q",原创 2020-07-19 20:03:25 · 160 阅读 · 0 评论 -
全排列 Ⅱ--回溯算法
LeetCode全排列给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解法:回溯法解题思路:思路很简单,因为要全排列,所以每一个数字都可能选择,即选择区间为[0,nums.length], 但是一个数字只能被选择一次,所以我们需要定义一个boolean[] used数组,长度为nums.length,又因为不能有重复的,所以一个数字的选择不能相同,我们通过这一行代码来剪原创 2020-07-19 16:23:52 · 158 阅读 · 0 评论 -
面试题 08.04. 幂集 --回溯算法
LeetCode面试题 08.04. 幂集幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解法:回溯法解题思路:思路很简单,这是很基础的回溯问题,使用递归,我们来依次的选择子集中的数字,我们有两种选择选数字,为了不选同一个数字,我们使用一个begin变量来表示该原创 2020-07-19 12:41:08 · 343 阅读 · 0 评论 -
黄金矿工--回溯算法
LeetCode 1219黄金矿工你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:每当矿工进入一个单元,就会收集该单元格中的所有黄金。矿工每次可以从当前位置向上下左右四个方向走。每个单元格只能被开采(进入)一次。不得开采(进入)黄金数目为 0 的单元格。矿工可以从网格原创 2020-07-18 22:53:39 · 587 阅读 · 0 评论 -
复原ip地址--回溯算法
LeetCode复原IP地址给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。有效的IP地址正好由四个整数(每个整数位于0到255之间组成),整数之间用'.'分隔。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]解法:回溯法解题思路:给定一个字符串,要我们找到可能IP地址格式,首先,根据IP地址格式,我们先将不符合条件的直接返回List<String> res= new ArrayList&原创 2020-07-18 19:15:58 · 1102 阅读 · 0 评论 -
面试题 08.08. 有重复字符串的排列组合--回溯算法
LeetCode面试题 08.08. 有重复字符串的排列组合有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合示例1:输入:S = "qqe"输出:["eqq","qeq","qqe"]示例2:输入:S = "ab"输出:["ab", "ba"]解法:回溯法解题思路: 首先,要求一个字符串的各种组合,我们第一个想法肯定是通过for循环,那么for循环的层数是多少勒,应该是该字符串的长度,然后通过for循环来进行匹配,但是,我们应该要注意一个问题,在进行排列组合的时候,可原创 2020-07-18 16:03:07 · 574 阅读 · 0 评论 -
组合总和--回溯算法
LeetCode组合总和Ⅱ给定一个数组 candidates和一个目标数 target ,找出 candidates 中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1原创 2020-07-18 12:13:44 · 185 阅读 · 0 评论