このコードは、一連の数値のpowersetを生成します。例えば、(0,1,2)のパワーセットが{(0,1,2)、(0,2)、(1,2)、(0,1)、(2)、(1) 、(0)、()}再帰的Javaプログラムの基底を決定する
public static List<List<Integer>> generatePowerSet(List<Integer> inputSet){
List<List<Integer>> powerSet = new ArrayList<>();
directedPowerSet(inputSet,0,new ArrayList<Integer>(), powerSet);
return powerSet;
}
public static void directedPowerSet(List<Integer> inputSet, int toBeSelected, List<Integer> selectedSoFar,List<List<Integer>> powerSet){
if(toBeSelected == inputSet.size()){
powerSet.add(new ArrayList<Integer>(selectedSoFar));
return;
}
//Generate all subsets that contain inputSet[toBeSelected].
selectedSoFar.add(inputSet.get(toBeSelected));
directedPowerSet(inputSet,toBeSelected+1,selectedSoFar,powerSet);
//Generate all subsets that do not contain inputSet[toBeSelected].
selectedSoFar.remove(selectedSoFar.size()-1);
directedPowerSet(inputSet,toBeSelected+1,selectedSoFar,powerSet);
}
なぜtoBeSelected == inputSet.size()ですか?
'Set>'を使用して、重複を避けることができます。すでに持っていると思われる要素を削除する必要はありません –
azro