Ques: 给定一组不同的整数S,返回所有可能的子集 . 子集中的元素必须按非降序排列 . 此外,子集应按升序(词典)顺序排序 .
My Approach: 我先输入了输入 . 然后找到所有子集并将每个步骤中找到的新子集附加到"res" . 现在我尝试使用自定义比较器对"res" arraylist进行排序 . 但输出出错了 .
对于输入arraylist a={ 15, 12, 4 }
输出: res={ {}, {4}, {4,12}, {4,15}, {4,12,15}, {12}, {12,15}, {15} }
预期产出: res={ {}, {4}, {4,12}, {4,,12,15}, {4,15}, {12}, {12,15}, {15} }
public static ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> a)
{ int i,j;
ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp;
res.add(new ArrayList<Integer>());
Collections.sort(a);
for(i=0;i<a.size();i++)
{ ArrayList<ArrayList<Integer>> str=new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> al:res)
{ temp=new ArrayList<Integer>();
temp.addAll(al);
temp.add(a.get(i));
str.add(temp);
}
res.addAll(str);
}
Collections.sort(res,new Comparator<ArrayList<Integer>>()
{ public int compare(ArrayList<Integer> p,ArrayList<Integer> q)
{ if(q.size()==0)
return 1;
else
return Integer.compare(p.get(0),q.get(0));
}
});
return res;
}
为了对内部列表进行相互排序,我写了这个比较器 . 但比较者给出了错误的答案 . 我想我的比较器编写错误 .
2 回答
您不应该仅仅比较列表的第一个元素 . 将两个列表与相同的第一个元素进行比较时会发生什么,但是后面有任意数量的不同元素?
要缓解此问题,您必须比较每个元素,直到达到差异 . 我建议如下:
您需要先单独对内部列表进行排序,然后对外部列表进行排序 .
下面的代码片段对我有用 .
Output:
Edit:
请找到适用于我的以下代码 .
Ouput: