回溯法
文章平均质量分 56
hestyle
戎码一生!
展开
-
LeetCode 组合总数(回溯法)
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],...原创 2019-02-06 20:01:08 · 1519 阅读 · 0 评论 -
LeetCode 优美的排列(回溯法)
假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例1:输入: 2输出: 2解释: 第 1 个优美的排列是 [...原创 2019-04-08 20:49:42 · 561 阅读 · 0 评论 -
LeetCode 大礼包(回溯法+剪枝)
在LeetCode商店中, 有许多在售的物品。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼包的价格,其他数字分别表示内含的其他种类物品的数量。任意大礼包可无限次购买。示例 1:输入: [2,5], [[3,0,...原创 2019-04-17 09:25:12 · 1356 阅读 · 0 评论 -
LeetCode 贴纸拼词(回溯法+备忘录)
我们给出了 N 种不同类型的贴纸。每个贴纸上都有一个小写的英文单词。你希望从自己的贴纸集合中裁剪单个字母并重新排列它们,从而拼写出给定的目标字符串 target。如果你愿意的话,你可以不止一次地使用每一张贴纸,而且每一张贴纸的数量都是无限的。拼出目标 target 所需的最小贴纸数量是多少?如果任务不可能,则返回 -1。示例 1:输入:["with", "example", "scie...原创 2019-04-23 16:39:11 · 1538 阅读 · 1 评论 -
LeetCode 划分为k个相等的子集(回溯法)
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。注意:1 <= k <= len(nums) <= 160 <...原创 2019-04-24 12:55:56 · 1616 阅读 · 0 评论 -
LeetCode 金字塔转换矩阵(深度优先搜索)
问题描述:现在,我们用一些方块来堆砌一个金字塔。 每个方块用仅包含一个字母的字符串表示,例如 “Z”。使用三元组表示金字塔的堆砌规则如下:(A, B, C) 表示,“C”为顶层方块,方块“A”、“B”分别作为方块“C”下一层的的左、右子块。当且仅当(A, B, C)是被允许的三元组,我们才可以将其堆砌上。初始时,给定金字塔的基层 bottom,用一个字符串表示。一个允许的三元组列表 all...原创 2019-05-04 17:17:24 · 769 阅读 · 0 评论 -
LeetCode 所有可能的路径(回溯法)
给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。示例:输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的:0--->...原创 2019-05-15 10:39:10 · 2506 阅读 · 0 评论 -
LeetCode 字母大小写全排列(回溯法)
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = "a1b2"输出: ["a1b2", "a1B2", "A1b2", "A1B2"]输入: S = "3z4"输出: ["3z4", "3Z4"]输入: S = "12345"输出: ["12345"]注意:S 的长度不超过12。S 仅由数字...原创 2019-05-11 10:38:20 · 1402 阅读 · 0 评论 -
LeetCode K站中转内最便宜的航班(回溯法、动态规划)
有 n 个城市通过 m 个航班连接。每个航班都从城市 u 开始,以价格 w 抵达 v。现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 k 站中转的最便宜的价格。 如果没有这样的路线,则输出 -1。示例 1:输入: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]src = 0, ...原创 2019-05-12 11:08:01 · 3673 阅读 · 2 评论 -
LeetCode 自由之路(动态规划、回溯法)
视频游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 ...原创 2019-04-06 18:49:02 · 686 阅读 · 0 评论 -
LeetCode 单词搜索(回溯法、图解)
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", ...原创 2019-02-15 19:25:13 · 1324 阅读 · 0 评论 -
LeetCode 子集(回溯法)
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路分析:对于这种选取元素的题,一般回溯法都能轻松决解。首先对子集的长度进行穷举,每次回溯法只寻找...原创 2019-02-15 17:05:19 · 1137 阅读 · 0 评论 -
Leetcode 组合总数II(回溯法+剪枝)
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1,...原创 2019-02-06 20:38:16 · 474 阅读 · 0 评论 -
LeetCode 全排列II(回溯法)
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]思路分析:请先参考 LeetCode 全排列 的解法。第一种方法:利用set容器中“元素的唯一性”进行去重。class Solution {public: set&lt;vector&lt;int&gt;&gt; resu...原创 2019-02-09 13:01:07 · 463 阅读 · 0 评论 -
LeetCode 复原IP地址(回溯法、穷举法)
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]思路分析:由于IP地址是32位二进制,分成四个段(每个段8位二进制),则每个段的取值范围位(0~255)。从字符串上来看,每个段的长度是1到3位。并且如果有一个段的长度大于1,则其第一位不能是“0”,形...原创 2019-02-17 16:47:01 · 872 阅读 · 0 评论 -
LeetCode 单词拆分II(回溯法+剪枝)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict = ["cat", "cats", "and", "sand", "dog"]原创 2019-02-23 19:35:21 · 862 阅读 · 0 评论 -
LeetCode 递增子序列(回溯法)
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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]]说明:给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字...原创 2019-04-05 09:47:48 · 989 阅读 · 0 评论 -
LeetCode N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例: 输入: 4 输出: [ [".Q..", // 解法 1 "...Q",...原创 2019-02-09 20:24:15 · 539 阅读 · 1 评论 -
LeetCode N皇后II
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回 n 皇后不同的解决方案的数量。示例: 输入: 4 输出: 2 解释: 4 皇后问题存在如下两个不同的解法。 [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["....原创 2019-02-09 20:39:31 · 257 阅读 · 0 评论 -
LeetCode 组合(回溯法)
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]思路分析:这种排列、组合问题,比较常用的就是回溯法(深度优先搜索)。就是使用一个中间变量保存一个中间结果,每次从未使用的元素中挑出一个元素放入中间结果,当...原创 2019-02-15 16:39:30 · 528 阅读 · 0 评论 -
LeetCode 将数组拆分成斐波那契序列(回溯法)
给定一个数字字符串 S,比如 S = “123456579”,我们可以将它分成斐波那契式的序列 [123, 456, 579]。形式上,斐波那契式序列是一个非负整数列表 F,且满足:0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型);F.length >= 3;对于所有的0 <= i < F.length - 2,...原创 2019-05-31 17:37:16 · 1171 阅读 · 0 评论