明明回溯更容易想到...为什么标签是动态规划,而且这破题目不说清楚个数少的子集在前面 import java.util.*;
public class Solution {
public ArrayList> subsets(int[] S) {
ArrayList> res = new ArrayList<>();
int len = S.length;
LinkedList track = new LinkedList<>();
for(int j=0;j
backtrack(j,track,res,0,len,S);
Collections.sort(res,new Comparator>(){
@Override
public int compare(ArrayList o1, ArrayList o2) {
if(o1.size()>o2.size()){
return 1;
}else if(o1.size()==o2.size()){
for(int i=0;i
if(o1.get(i)!=o2.get(i)){
return o1.get(i)>(o2.get(i))?1:-1;
}
}
}
return -1;
}
});
}
res.add(0,new ArrayList());
return res;
}
public void backtrack(int n,LinkedList track,
ArrayList> res,
int row,int len,int[] S){
if(row==n+1){
if(track.size()==n+1){
res.add(new ArrayList(track));
}
return;
}
for(int i=0;i
if(!track.isEmpty()){
if(S[i]<=track.getLast()){
continue;
}
track.add(S[i]);
}else{
track.add(S[i]);
}
backtrack(n,track,res,row+1,len,S);
track.removeLast();
}
}
}