import java.util.*;
public class Subset
{
public ArrayList<ArrayList<Integer>> getSubsets(int[] A, int n)
{
if(A==null||A.length==0)
return new ArrayList<>();
Arrays.sort(A);// 數組A從小到大排序
return getSubsetsCore(A,n);
}
public ArrayList<ArrayList<Integer>> getSubsetsCore(int[] A,int n)
{
ArrayList<ArrayList<Integer>> outter = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> inner;
if(n==1){// 循環終止條件
inner = new ArrayList<Integer>();
inner.add(A[0]);
outter.add(inner);
return outter;
}
ArrayList<ArrayList<Integer>> tmp = getSubsetsCore(A, n-1);
int i,j;
for (i = 0; i < tmp.size(); i++)
{
// 1. 在sets(n-1)的所有子集前邊插入當前元素A[n-1]。
inner = new ArrayList<Integer>();
inner.add(A[n-1]);
for (j = 0; j < tmp.get(i).size(); j++) {
inner.add(tmp.get(i).get(j));
}
outter.add(inner);
}
inner = new ArrayList<Integer>();
inner.add(A[n-1]);
outter.add(inner);// 2. A[n-1]單獨作爲一個子集[A[n-1]]。
outter.addAll(tmp);// 3. sets(n-1)同時也應包含到sets(n)中。
return outter;
}
}
程序員面試金典(動態規劃):返回某集合的所有子集(java解法)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.