經典演算法——字串的所有組合
阿新 • • 發佈:2019-01-31
#include<iostream> #include<vector> #include<string.h> using namespace std; //從頭掃描字串得到第一個字元,針對第一個字元,有兩種選擇 //把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元; //如果不把這個字元放到組合中去,則需要在剩下的n-1個字元中選取m個字元 void Combination(char* string, int number, vector<char>& result) { if (number == 0) { vector<char>::iterator iter = result.begin(); for (; iter < result.end(); ++iter) cout << (*iter); cout << endl; return; } if (*string == '\0') return; result.push_back(*string); Combination(string + 1, number - 1, result);//把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元 result.pop_back(); Combination(string + 1, number, result);//不把這個字元放到組合中去,則需要在剩下的n-1個字元中選取m個字元 } void Combination(char* string) { if (string == NULL) return; int length = strlen(string); vector<char> result; for (int i = 1; i <= length; i++) { Combination(string, i, result); } } int main() { char s[] = "abc"; Combination(s); system("pause"); return 0; }