題目:《程式設計師面試金典(第5版)》p226
編寫乙個方法,返回某集合的所有子集
方法一:迭代法,每增加乙個元素,就在已生成子集的基礎上,給每乙個子集新增該元素,形成新的子集。
vector< vector> getsubsets(vectornum)
); if (num.empty())
vectortmp;
tmp.push_back(num[0]);
res.push_back(tmp);
for (int i = 1; i < num.size(); i++) }
return res;
}
方法二:遞迴法。
void getsubsets_core(const vector&num, int index, vectorcur, vector< vector> &res)
else }
vector< vector> getsubsets(const vector&num)
getsubsets_core(num, 0, cur, res);
return res;
}
如何得到某集合的所有子集合
我們都知道,乙個含n個元素的集合擁有2 n個子集合,並且不難發現,其中每個子集合都是從0到2 n 1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示 000 100010 110001 101011 111所以根據數字的二進位制轉換,可以輕鬆獲得乙個集合的所有子集合,如下 sub getal...
python實現返回集合的所有子集
很簡單,不過想法特別好,在學習python的過程中看見了,於是就把他記錄下來。演算法是利用遞迴的思想來實現返回集合的所有子集 如果想要對子集長度進行限制,引數加個limit就行了 def allsubsets s if len s 0 return return allsubsets s 1 s 0...
集合的所有子集
假設集合a 它的所有集合是 表示空集 可以這樣理解這張圖,從集合a的每個元素自身分析,它只有兩種狀態,或是某個子集的元素,或是不屬於任何子集,所以求子集的過程就可以看成對每個元素進行 取捨 的過程。n個元素有2的n次方個組合 每一層左邊節點表示加入該層元素,右邊表示不加入。第二層表示對第1個元素的處...