1
我有這個簡單的程序來計算給定集的所有子集。ArrayList得到隨機更新
該算法,我相信是正確的。 但是部分:
while (included.size()>0){
ArrayList<Integer> temp =included.remove(0);
temp.add(first_element);
output.add(temp);
}
聲明temp.add(first_element)
不必要地更新not_included。 請幫我理解爲什麼。
public class Recursion {
public static ArrayList<ArrayList<Integer>> getSubsets (ArrayList<Integer> input_set){
ArrayList<ArrayList<Integer>> output=new ArrayList<ArrayList<Integer>>();
if (input_set.isEmpty()){
ArrayList<Integer> this_subset=new ArrayList<Integer>();
output.add(this_subset);
}
else if (input_set.size()==1){
ArrayList<Integer> empty_subset=new ArrayList<Integer>();
output.add(input_set);
output.add(empty_subset);
}
else{
int first_element=input_set.remove(0);
ArrayList<ArrayList<Integer>> included = getSubsets(input_set);
ArrayList<ArrayList<Integer>> not_included = getSubsets(input_set);
while (included.size()>0){
ArrayList<Integer> temp =included.remove(0);
temp.add(first_element);
output.add(temp);
}
while (not_included.size()>0){
output.add(not_included.remove(0));
}
}
return output;
}
public static void main(String[] args) {
ArrayList<Integer> test= new ArrayList<Integer>();
test.add(2);
test.add(1);
System.out.print(getSubsets(test));
}
}
是因爲函數getSubsets是靜態的嗎? – 2013-03-01 13:12:08
@ManasPaldhe這完全與它無關。你應該看看Java中引用對象的原因,因爲沒有(直接)指針。 – Sebastian 2013-03-01 13:14:17