代码如下
class Solution
{
public:
bool nextPermutation(vector<int>& nums)
{
int len = nums.size();
if (len <= 1) return false;
int i = len - 1;
i--;
while (1)
{
if (i < 0) return false;
if (nums[i] < nums[i + 1])
{
int j = len - 1;
while (!(nums[i] < nums[j])) j--;
swap(nums[i], nums[j]);
vector<int>::iterator it = nums.begin();
advance(it, i + 1);
reverse(it, nums.end());
return true;
}
i--;
}
}
};
测试代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
class Solution
{
public:
bool nextPermutation(vector<int>& nums)
{
int len = nums.size();
if (len <= 1) return false;
int i = len - 1;
i--;
while (1)
{
if (i < 0) return false;
if (nums[i] < nums[i + 1])
{
int j = len - 1;
while (!(nums[i] < nums[j])) j--;
swap(nums[i], nums[j]);
vector<int>::iterator it = nums.begin();
advance(it, i + 1);
reverse(it, nums.end());
return true;
}
i--;
}
}
};
const int N = 5;
int main()
{
Solution solver;
vector<int> v;
for (int i = 0; i < N; i++)
{
v.push_back(i + 1);
}
do {
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}while (solver.nextPermutation(v));
return 0;
}