网站首页 > 资源文章 正文
题目:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
标签:回溯算法
示例:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
我的思路:这个题目和上一篇题目一样,都是全排列。不同的是,这个题目的输入参数数组中可以包含重复数字,而且输出结果是所有的不重复的全排列,可以参考一下例子。那么我们该怎么做呢? 思考ing .... 这类的题目,输入参数里面有重复数字,我们最好还是将输入数组排序一下,将相同元素放在一起,这样我们进行回溯的时候就比较有序,假如不排序,那么回溯的时候取值就比较复杂,容易出错。我的代码如下:
public static List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<>();
back(nums, new boolean[nums.length], new ArrayList<>(), res);
return res;
}
public static void back(int[] nums, boolean[] used, List<Integer> pick, List<List<Integer>> res) {
if (pick.size() == nums.length) {
res.add(new ArrayList<>(pick));
return;
}
for (int i = 0; i < nums.length; i++) {
if (used[i] || i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) {
continue;
}
pick.add(nums[i]);
used[i] = true;
back(nums, used, pick, res);
used[i] = false;
pick.remove(pick.size() - 1);
}
}
以上解答是学习上一篇回溯算法中的方法二,利用boolean[]数组,当然,输入数组得先进行排序,然后,在回溯的时候,每次取值判断如下
if (used[i] || i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) {
continue;
}
这个意思是 当前元素使用过就跳过。或者 当前元素与前一个元素相等,而且前一个元素没有被使用过就跳过, 因为我们排序后,相同的元素需要按照从前往后的顺序去取,若前一个元素还没被使用过,就证明当前步骤不合法,就跳过。
当前文章和上一篇文章是回溯算法里很经典的题目,求得输入参数的全排列。
以上就是我的解答了,如有错误,请各位大佬指出,谢谢!
若对您有帮助,大佬们帮我点个赞哈~~ : )
- 上一篇: 全排列算法解析
- 下一篇: 一文搞懂全排列、组合、子集问题(经典回溯递归)
猜你喜欢
- 2024-11-24 从电影《蝴蝶效应》中学习回溯算法的核心思想
- 2024-11-24 腾讯面试题目「回溯算法」排列问题
- 2024-11-24 力扣刷题技巧篇|程序员萌新如何高效刷题
- 2024-11-24 看完必会的回溯算法入门攻略,丈母娘看了都说好
- 2024-11-24 基本算法——回溯算法
- 2024-11-24 算法|迷宫搜索之深搜DFS和广搜BFS
- 2024-11-24 这一次,真正理解回溯算法
- 2024-11-24 leetcode 回溯法解题
- 2024-11-24 让人震惊的回溯算法解题套路框架你知道吗?
- 2024-11-24 高中数学学习(31)——排列组合(上)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)