一、题目内容
二、题解
解法1:
思路
全排列+数组长度排序
代码
public class Solution { ArrayList<ArrayList<Integer>> ans; ArrayList<Integer> path; int[] nums; public ArrayList<ArrayList<Integer>> subsets(int[] S) { ans = new ArrayList(); path = new ArrayList(); this.nums = S; recur(0); //sortByLen(ans,1,ans.size()-1); return ans; } private void recur(int x){ ans.add(new ArrayList(path)); for(int i = x;i<nums.length;i++){ path.add(nums[i]); recur(i+1); path.remove(path.size()-1); } } Collections.sort(new ArrayList<T>(),new Comparable<Integer>(){ @Override public int compareTo(Integer o) { return 0; } }); private void sortByLen(ArrayList<ArrayList<Integer>> ans,int low,int high){ if(low>=high){ return; } int partation = partation(ans,low,high); sortByLen(ans,low,partation-1); sortByLen(ans,partation+1,high); } private int partation(ArrayList<ArrayList<Integer>> ans,int low,int high){ int left = low,right = high; int target = ans.get(left).size(); ArrayList<Integer> temp = ans.get(left); while(left<right){ while(left<right&&ans.get(right).size()>target){ right--; } ans.set(left,ans.get(right)); while(left<right&&ans.get(left).size()<target){ left++; } ans.set(right,ans.get(left)); } ans.set(left,temp); return left; }}