首页 > 其他 > 详细

【leetcode】Permutations

时间:2014-06-01 15:04:59      阅读:797      评论:0      收藏:0      [点我收藏+]

问题:

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

分析:

permutations II 里的 一样,这里排个序就很简单,一样的代码提交,同能通过,看来,考察的应该不是如此简单。
这里给个不排序的吧,其实还是用的排序的原理,只是嫁接了一层。

实现:

  vector<vector<int> > permute(vector<int> &num) {
    const int len = num.size();

	vector<vector<int> > re;
	re.push_back(num);
	vector<int> index;
	
	if(len <= 1)
		return re;
		
	int i = len - 1;
	for (int n = 0; n < len; ++n)
	{
		index.push_back(n);
	}
	//reserve num, we don't plan to change it.
	vector<int> cp(num);
	while (1)
	{
		int ii = i;
		--i;
		if(i < 0 )
		{
			return re;
		}
		if(index[ii] > index[i]){
			int j = len - 1;
			while (index[j] < index[i]) --j;
			swap(index[i], index[j]);
			//you can write a reverse function yourself.
			//Reverse(num, ii, len - 1);
			reverse(index.begin() + ii,index.end());
			for (int n = 0; n < len; ++n)
			{
				cp[n] = num[index[n]];
			}
			re.push_back(cp);
			i = len - 1;
		}
	
	}
}


【leetcode】Permutations,布布扣,bubuko.com

【leetcode】Permutations

原文:http://blog.csdn.net/shiquxinkong/article/details/27874201

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!