输入整形数组和长度,输出符合长度的组合,组合顺序应与输入保持一致。
如输入:{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;
}