输入整形数组和长度,输出符合长度的组合,组合顺序应与输入保持一致。
如输入:{1, 2, 3}, 长度:2
输出:{1,2},{1,3}, {2, 3}
void permutation(int a[], int n, int k){ vector<int> result; stack<int> buf; bool needPop = false; buf.push(0); result.push_back(a[0]); while (!buf.empty()) { if (buf.size() == k) { for (int i = 0; i < result.size(); i++) { cout << result[i]; } cout << endl; needPop = true; } int index = buf.top(); if (index == n-1) { needPop = true; buf.pop(); result.pop_back(); continue; } if (needPop) { buf.pop(); result.pop_back(); needPop = false; } if (index+1 < n) { buf.push(index+1); result.push_back(a[index+1]); } }}int main(int argc, char *argv[]){ int a[] = {1, 2, 3, 4}; int aSize = sizeof(a)/sizeof(int); permutation(a, aSize, 3); return 0; }
新闻热点
疑难解答