問題:給定一組不同的整數S,返回所有可能的子集。子集中的元素必須以非降序排列。此外,子集應按升序(詞典)順序排序。
我的做法:我首先對輸入進行了排序。然後找到所有子集,並將每個步驟中找到的新子集添加到「res」中。現在我嘗試使用自定義比較器對「res」數組列表進行排序。但輸出錯了。
對於輸入數組列表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} }
排序內部列表長度不等的整數ArrayList的ArrayList
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;
}
向該列表內相對於彼此我寫這個比較器進行排序。但比較者給出了錯誤的答案。我想我的比較器寫錯了。
如果p.size()是0,會發生什麼? – RealSkeptic
如果你檢查'q.size()== 0',你也應該檢查'p'。順便說一下:使用'List#isEmpty'而不是'.size()== 0' –
在給出的例子中,預期的輸出是什麼?嘗試一個最小的工作示例,並用給定的和期望的輸出更新問題。 – bracco23