您的位置:首页 > 其它

【leetcode】Permutations

2014-05-31 23:29 260 查看

问题:

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
= num[index
];
}
re.push_back(cp);
i = len - 1;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: