回溯算法
在河之洲木水
这个作者很懒,什么都没留下…
展开
-
LeetCode 刷题 -- 236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。所有 Node.val 互不相同。p 和 q 均存在于给定的二叉树中。树中节点数目在范围 [2, 10。一个节点也可以是它自己的祖先。原创 2023-02-25 14:23:32 · 137 阅读 · 0 评论 -
LeetCode刷题系列 -- 22. 括号生成
链接:https://leetcode.cn/problems/generate-parentheses。输出:["((()))","(()())","(())()","()(())","()()()"]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。来源:力扣(LeetCode)原创 2022-09-12 18:48:20 · 172 阅读 · 0 评论 -
LeetCode刷题系列 -- 剑指 Offer 38. 字符串的排列
链接:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof/输出:["abc","acb","bac","bca","cab","cba"]你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。输入一个字符串,打印出该字符串中字符的所有排列。1原创 2022-09-02 00:28:07 · 803 阅读 · 0 评论 -
LeetCode刷题系列 -- 491. 递增子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。思路:回溯算法,因为有重复的组合,所以需要用 Set去重。输入:nums = [4,4,3,2,1]输入:nums = [4,6,7,7]输出:[[4,4]]...原创 2022-09-01 00:22:01 · 68 阅读 · 0 评论 -
LeetCode 刷题系列 -- 17. 电话号码的字母组合
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number。输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。digits[i] 是范围 ['2', '9'] 的一个数字。输入:digits = "23"输出:["a","b","c"]输入:digits = "2"输入:digits = ""...原创 2022-08-31 23:24:34 · 343 阅读 · 0 评论 -
LeetCode刷题系列 -- 39. 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]原创 2022-08-22 23:49:16 · 182 阅读 · 0 评论 -
LeetCode 刷题系列 -- 47. 全排列 II
2. 定义数组 used ,长度为 nums.length , used[i] 代表 nums[i] 是否被放入子集中。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]链接:https://leetcode.cn/problems/permutations-ii。给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。3. 回溯算法遍历数组。输入:nums = [1,1,2]输入:nums = [1,2,3]原创 2022-08-21 01:07:39 · 111 阅读 · 0 评论 -
LeetCode刷题系列 -- 40. 组合总和 II
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。链接:https://leetcode.cn/problems/combination-sum-ii。输入: candidates = [10,1,2,7,6,1,5], target = 8,输入: candidates = [2,5,2,1,2], target = 5,3. 回溯算法遍历数组。注意:解集不能包含重复的组合。来源:力扣(LeetCode)原创 2022-08-20 23:41:26 · 622 阅读 · 0 评论 -
LeetCode 刷题系列 -- 90. 子集 II
2. 定义数组 used ,长度为 nums.length , used[i] 代表 nums[i] 是否被放入子集中。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]此类型为 元素可重不可复选。3. 回溯算法遍历数组。输入:nums = [1,2,2]输入:nums = [0]输出:[[],[0]]原创 2022-08-20 23:08:17 · 201 阅读 · 0 评论 -
LeetCode 刷题系列 -- 77. 组合
链接:https://leetcode.cn/problems/combinations。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。数量为 k 的组合等价于 数量为 k的子集。你可以按 任何顺序 返回答案。输入:n = 4, k = 2。输入:n = 1, k = 1。来源:力扣(LeetCode)原创 2022-08-20 21:33:25 · 131 阅读 · 0 评论 -
LeetCode刷题系列 -- 78. 子集
1. 定义 递归函数 backtrace, 函数一共4个参数,分别为 数组 nums ,子集 subSet ,下一个将要遍历的元素的位置以及结果 result。给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]所谓幂集指的是集合的个数为 2 的 nums.length次幂 个。输入:nums = [1,2,3]输入:nums = [0]输出:[[],[0]]...原创 2022-08-19 00:22:34 · 82 阅读 · 0 评论 -
LeetCode刷题系列--51. N 皇后
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。链接:https://leetcode.cn/problems/n-queens。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。输出:[["Q"]]...原创 2022-08-14 21:58:07 · 97 阅读 · 0 评论 -
LeetCode刷题系列 -- 46. 全排列
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。你可以 按任意顺序 返回答案。链接:https://leetcode.cn/problems/permutations。输入:nums = [1,2,3]输出:[[0,1],[1,0]]nums 中的所有整数 互不相同。输入:nums = [0,1]来源:力扣(LeetCode)输入:nums = [1]...原创 2022-08-10 23:44:27 · 547 阅读 · 0 评论 -
LeetCode 刷题系列 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]]提示:1 <=.原创 2021-09-05 22:51:32 · 154 阅读 · 0 评论 -
LeetCode 22. 括号生成
数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2021-05-31 00:16:03 · 61 阅读 · 0 评论 -
LeetCode刷题系列 -- 剑指 Offer 12. 矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[["a","b","c","e"],["s","f","c","s"],["a","d","e","e"]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了..原创 2020-12-06 17:14:46 · 96 阅读 · 0 评论 -
LeetCode刷题系列 -- 77. 组合
题目:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations思路:回溯法Java代码如下:class Solution { public List<L...原创 2020-11-29 20:24:19 · 81 阅读 · 0 评论 -
LeetCode刷题系列 -- 216. 组合总和 III
题目: 找出所有相加之和为n 的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combina...原创 2020-11-29 20:03:59 · 164 阅读 · 0 评论 -
LeetCode刷题系列 -- 90. 子集 II
题目:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets-ii思路: 利用回溯算法,if(i>start && nums[i] == nums[i...原创 2020-11-28 21:13:21 · 87 阅读 · 0 评论 -
LeetCode刷题系列 -- 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]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10来源:力扣(...原创 2020-11-28 20:45:37 · 236 阅读 · 1 评论 -
LeetCode刷题系列 -- 46. 全排列
题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations思路:此题运用回溯法求解Java代码如下:class Solution { public List<...原创 2020-11-28 19:55:15 · 65 阅读 · 0 评论 -
LeetCode刷题系列 -- 39. 组合总和
题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例2:输入:candidates = [2,3,5],...原创 2020-11-27 21:24:38 · 169 阅读 · 0 评论 -
LeetCode刷题系列 -- 78. 子集
题目: 给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets这种求多种组合的问题,明显是可以用回溯方法的,其...原创 2020-11-27 19:45:42 · 156 阅读 · 0 评论 -
数据结构与算法 --- 回溯算法
题目:八皇后问题有一个 8x8 的棋盘,希望往里放 8 个棋子(皇后),每个棋子所在的行、列、对角线,都不能有另一个棋子。找到所有满足这种要求的放棋子方式回溯的处理思想,有点类似枚举搜索。我们枚举所有的解,找到满足期望的解。为了有规律 地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程分为多个阶段。每个阶段, 我们都会面对一个岔路口,我们先随意选一条路走,当发现这条路走不通的时候(不符合期 望的解),就回退到上一个岔路口,另选一种走法继续走。Java代码如下:publi..原创 2020-06-06 17:04:20 · 146 阅读 · 0 评论