解答
package day3;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public List<List<Integer>> permuteUnique(int[] num){
List<List<Integer>> res = new ArrayList<>();
if(num.length == 1){
List<List<Integer>> resultList = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
list1.add(num[0]);
resultList.add(list1);
return resultList;
}
if(num.length == 2){
List<List<Integer>> resultList = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
list1.add(num[0]);
list1.add(num[1]);
resultList.add(list1);
if(num[0] != num[1]){
List<Integer> list2 = new ArrayList<>();
list2.add(num[1]);
list2.add(num[0]);
resultList.add(list2);
}
return resultList;
}
for (int i = 0; i < num.length; i++) {
if(i!= 0){
Boolean tar = true;
for (int j = 0; j < i; j++) {
if(j !=i && num[j]==num[i]) tar = false;
}
if(!tar) continue;
}
int[] newIntArray = new int[num.length - 1];
for(int j = 0,k = 0;j<num.length;j++){
if(j != i){
newIntArray[k] = num[j];
k++;
}
}
List<List<Integer>> temp_res = permuteUnique(newIntArray);
for (List<Integer> item:temp_res){
item.add(num[i]);
res.add(item);
}
}
return res;
}
public static void main(String[] args) {
Main m = new Main();
int[] num = new int[]{1,1,2,2};
System.out.println(m.permuteUnique(num));
}
}
补充:
数组截取部分长度:Arrays.copyOf(T[] original,newlength)
从0号下标开始,newlength为新数组实际长度,超出原数组的部分填充0
Arrays.copyOfRange(int[] original,int from,int to)
from:起始下标
to:结束位置,可以超越原数组长度,超出部分以 0 填充