leetcode 0047
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
思路
跟上一题差不多,虽然元素可能重复,但是索引不会重复,安索引来往list里添加元素。
但是这样还是可能会有重复,最后做一个查重就行了。
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> ls = new ArrayList<List<Integer>>();
List<Integer> l = new ArrayList<Integer>();
List<Integer> index = new ArrayList<Integer>();
getRange(ls, l, nums, index);
System.out.println(ls);
return ls;
}
public void getRange(List<List<Integer>> ls, List<Integer> l, int[] nums, List<Integer> index) {
if (l.size() == nums.length && !hasSameList(ls, l)) {
ArrayList<Integer> copyL = new ArrayList<Integer>();
for (int i : l) {
copyL.add(i);
}
ls.add(copyL);
return;
}
for (int i = 0; i < nums.length; i++) {
if (index.contains(i)) {
continue;
}
l.add(nums[i]);
index.add(i);
getRange(ls, l, nums, index);
index.remove(index.size() - 1);
l.remove(l.size() - 1);
}
}
public boolean hasSameList(List<List<Integer>> ls, List<Integer> l) {
for (List<Integer> ll : ls) {
boolean flag = true;
for (int i = 0; i < l.size(); i++) {
if (l.get(i) != ll.get(i)) {
flag = false;
break;
}
}
if (flag) {
return flag;
}
}
return false;
}
}