Ques:異なる整数の集合Sが与えられれば、可能なすべてのサブセットを返します。サブセット内の要素は降順でない必要があります。また、サブセットは昇順(辞書順)順にソートする必要があります。
私のアプローチ:入力を最初にソートしました。次に、すべてのサブセットを見つけ、各ステップで見つかった新しいサブセットを「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} }
内部リストの長さが可変である整数のArrayListsの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'もチェックしてください。 BTW: '.size()== 0"の代わりに 'List#isEmpty'を使います。 –
与えられた例では、意図した出力は何ですか?最小限の作業例を試して、与えられた出力と望ましい出力で質問を更新してください。 – bracco23