递归、回溯、分治
唯有一颗慎独心
渴望力量使我成为琦玉
展开
-
N皇后
题目: n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 解析: 采用回溯法解决。 解题思路: N皇后解决思路 代码: class Solution { public List<List<String>> solveNQueens(int n)原创 2021-03-03 13:03:55 · 296 阅读 · 0 评论 -
括号生成
题目: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 解析: 但是要考虑不合法的情况: 代码: class Solution { public List<String> generateParenthesis(int n) { List<String> ans = new ArrayList<>(); getAns("", n, n, ans); return a原创 2021-03-01 22:04:06 · 78 阅读 · 0 评论 -
组合数之和2
题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 解析: 先参考: 求子集I 求子集II 这道题只是加入了一个判断 子集和大小 的条件。 我们可以按照求子集II的方法,先将所有子集找出来,再找出元素和为target的子集。 但是又因为: 所以我们可以 代码: class Sol原创 2021-03-01 20:41:33 · 159 阅读 · 1 评论 -
求子集II
题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 解析: 参考:求子集I 我们再进行修改一下:先把数组进行排序 然后在递归循环中,判断当前数字和上一个数字是否相同,相同的话跳过即可。 也就是说【1,2,2,2】的情况下,只进行0下标【1】和1下标【2】的递归循环,3下标及后面的直接跳过。 代码: class Solution { public List<List<Integer>> subsetsWit原创 2021-03-01 19:00:06 · 94 阅读 · 0 评论 -
求子集I
题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 解析: 思路:回溯法 代码: public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> list = new ArrayList<>(); backtrack(list, new Array原创 2021-03-01 16:31:03 · 106 阅读 · 0 评论