輸出乙個集合的所有子集

2021-07-16 10:51:54 字數 731 閱讀 2263

輸出字串的所有子集

如:對「abc」

輸出:c b bc a ac ab abc

第一種做法: 2^n 遍歷每個字元,每個字元只能取或者不取。取就把該字元加入結果中,遍歷完畢後,輸出結果字串。

**如下:

//// main.cpp

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

//// created by zjl on 16/8/10.

//#include #include using namespace std;

void solve(string s, string& str, vector& res, int num)

solve(s, str, res, num+1);

str += s[num];

solve(s, str, res, num+1);

str.erase(str.size()-1);

}int main(int argc, const char * argv)

k++;

j = j >> 1;

}res.push_back(str);

}}int main(int argc, const char * argv) {

string s = "abc";

vectorres;

solve(s, res);

for(auto a: res)

cout<

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

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

輸出乙個集合的所有子集(演算法)

輸出乙個集合的所有子集 演算法 時間複雜度很顯然,最少也是2 n,空間複雜度,是n,比較簡單 每個元素要麼在子集中,要麼不在,用 j 的二進位制形式的每一位代表陣列a中對應的位置的元素是否在子集中,例如,當i 5時,j i 5,那麼j 0101 我們對應的輸出 a 0 a 2 這個過程在while迴...

給定乙個集合,輸出它的所有子集

題目 集合是由大字字母 a z 組成的,要求輸出集合的所有子集,每個子集一行,不能使用遞迴。例如 abd 的子集 null 空集 a b c ab ac bc abc 共8個 這個題可以用位圖的思想做。比如集合 a,b 對應位向量v 000.00011 26維 那麼a表示1,b表示2,0,3 迴圈 ...