import java.util.*;
public class Solution {
public class ComparaInteger implements Comparator<Integer> {
@Override
public int compare(Integer num1, Integer num2) {
return num1 - num2;
}
}
public class ComparaArrayList implements Comparator<ArrayList<Integer>> {
@Override
public int compare(ArrayList<Integer> arrayList1, ArrayList<Integer> arrayList2) {
int len1 = arrayList1.size();
int len2 = arrayList2.size();
int p1 = 0;
int p2 = 0;
while (p1 < len1 && p2 < len2) {
if (arrayList1.get(p1) < arrayList2.get(p2)) {
return -1;
}
else if (arrayList1.get(p1) > arrayList2.get(p2)) {
return 1;
}
else {
p1++;
p2++;
}
}
if (len1 < len2) {
return -1;
}
else if (len1 > len2) {
return 1;
}
else {
return 0;
}
}
}
public ArrayList<ArrayList<Integer>> res = new ArrayList<>();
public int len;
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型二维数组
*/
public ArrayList<ArrayList<Integer>> subsets (int[] nums) {
// write code here
len = nums.length;
ArrayList<Integer> arrayList = new ArrayList<>();
process(nums, 0, arrayList);
res.sort(new ComparaArrayList());
return res;
}
public void process(int[] nums, int start, ArrayList<Integer> arrayList) {
ArrayList<Integer> copyArrayList = new ArrayList<>();
copyArrayList.addAll(arrayList);
copyArrayList.sort(new ComparaInteger());
if (!isContains(copyArrayList)) {
res.add(copyArrayList);
}
if (start >= len) {
return;
}
for (int i = start; i < len; i++) {
arrayList.add(nums[i]);
process(nums, i + 1, arrayList);
arrayList.remove(arrayList.size() - 1);
}
return;
}
public boolean isContains(ArrayList<Integer> arrayList) {
boolean bool = false;
for (ArrayList tmpArrayList : res) {
if (isEquals(tmpArrayList, arrayList)) {
bool = true;
break;
}
}
return bool;
}
public boolean isEquals(ArrayList<Integer> arrayList1, ArrayList<Integer> arrayList2) {
boolean bool = true;
int len1 = arrayList1.size();
int len2 = arrayList2.size();
if (len1 != len2) {
return false;
}
for (int i = 0; i < len1; i++) {
if (arrayList1.get(i) != arrayList2.get(i)) {
bool = false;
break;
}
}
return bool;
}
}