首页 > 学院 > 开发设计 > 正文

组合(非递归)

2019-11-06 07:25:45
字体:
来源:转载
供稿:网友

输入整形数组和长度,输出符合长度的组合,组合顺序应与输入保持一致。

如输入:{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;    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表