leetcode47. 全排列 II
【摘要】 47. 全排列 II
难度中等223
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路:和全排列差不多,要排序+剪枝,懒得写了给个题解网址。
题解
class Solution { int[] visited;//标记数组 List<...
难度中等223
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
思路:和全排列差不多,要排序+剪枝,懒得写了给个题解网址。
-
class Solution {
-
int[] visited;//标记数组
-
List<List<Integer>> res = new ArrayList<>();//答案
-
public List<List<Integer>> permuteUnique(int[] nums) {
-
//修改1:排序
-
Arrays.sort(nums);
-
visited = new int[nums.length];
-
backtrack(nums, new ArrayList<Integer>());
-
return res;
-
}
-
-
private void backtrack(int[] nums, ArrayList<Integer> tmp) {
-
if (tmp.size() == nums.length) {
-
res.add(new ArrayList<>(tmp));
-
return;
-
}
-
for (int i = 0; i < nums.length; i++) {
-
if (visited[i] == 1) continue;
-
//修改2:剪枝,
-
if (i > 0 && nums[i - 1] == nums[i] && visited[i - 1]==0) {
-
continue;
-
}
-
visited[i] = 1;
-
tmp.add(nums[i]);
-
backtrack(nums, tmp);
-
visited[i] = 0;
-
tmp.remove(tmp.size() - 1);
-
}
-
}
-
}
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/104367558
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)