輸出集合的所有子集

2021-07-13 05:06:34 字數 1053 閱讀 6789

題目描述:

輸出含有n個元素集合的所有子集。例如,三個元素的所有子集是:{},,,,,,,.

輸入:abc

輸出:cba

bacaacb

bcnull

解題思路:

遞迴思路:

* 例如:對於集合來說,我們如果獲得它的所有子集,我們可以分兩部分:

* 1.獲取集合的所有子集(問題規模見減小)

* 2.的所有子集中都新增進入a

* 這兩部分的和,恰好是整個集合的子集

public static listsubset(string str)

//獲取str中,除去第乙個元素後,子串的所有元素的子集

listsublist=subset(str.substring(1));

for(string string:sublist)else

} list.addall(sublist);//合併這兩個部分

return list;

}

執行:

public static void main(string args) 

}

結果:

子集的數目:32

edcba

dcba

ecba

cbaedba

dbaeba

baedca

dcaeca

caeda

daea

aedcb

dcbecb

cbedb

dbeb

bedc

dcecced

denull

關於遞迴的一點感悟

1.先弄清楚遞迴的順序。在遞迴的實現中,通常假設後續的呼叫已經完成,在此基礎上,才實現遞迴的邏輯。在該題中,我們假設子串的所有子集已經求出的情況下,再將第乙個元素新增進去,再進行合併。

2.分析清楚遞迴的邏輯

3.考慮好遞迴的退出條件,也就是邊界條件。

集合的所有子集

假設集合a 它的所有集合是 表示空集 可以這樣理解這張圖,從集合a的每個元素自身分析,它只有兩種狀態,或是某個子集的元素,或是不屬於任何子集,所以求子集的過程就可以看成對每個元素進行 取捨 的過程。n個元素有2的n次方個組合 每一層左邊節點表示加入該層元素,右邊表示不加入。第二層表示對第1個元素的處...

輸出乙個集合的所有子集

輸出字串的所有子集 如 對 abc 輸出 c b bc a ac ab abc 第一種做法 2 n 遍歷每個字元,每個字元只能取或者不取。取就把該字元加入結果中,遍歷完畢後,輸出結果字串。如下 main.cpp 輸出乙個集合的所有子集 created by zjl on 16 8 10.includ...

輸出乙個集合的所有子集合

面試遇上了這個問題,思量了會,想到用遞迴的方式解決這個問題。回來網上搜尋了下,發現通過二進位制的思想來解決這個問題更容易,下面我把兩種解決方式的思想及原碼分享出來。我們都知道,乙個含n個元素的集合擁有2 n個子集合,並且不難發現,其中每個子集合都是從0到2 n 1 每個數的二進位制格式中0 放棄,1...