这个一年前就写过几次了,不过那时一年前的事了,惊奇地发现可能自己有些倒退了!!!居然这个也折腾了一个多小时...
class Solution {
bool check(vector<int> num)
{
for(int i = 0; i < num.size() - 1; i++)
{
if(num[i] < num[i + 1])
{
return true;
}
}
return false;
}
void adj(vector<int> &num)
{
int i = num.size() - 1;
while(num[i - 1] >= num[i])//这里和下面循环的等号是为了兼容有重复元素的情况
{
i--;
}
int j = num.size() - 1;
while(num[j] <= num[i - 1])
{
j--;
}
swap(num[i - 1], num[j]);
sort(num.begin() + i, num.end());
}
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > buf;
sort(num.begin(), num.end());
while(check(num))
{
adj(num);
buf.push_back(num);
}
return buf;
}
};