原题链接
算法
- 找到字典序相邻更大的序列,从序列最右端向最左端数起,直到找到一个相对更小的数,如图所示,4就是我们要找的数
- 在4的右侧找到比4大的最小的数,如图所示,5
- 两个数交替,为了保证字典序相邻,交换之后,对5之后的序列进行从小到大的排序
代码(c++)
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-2;
if(i<0)
return;
while(i>=0&&nums[i+1]<=nums[i])
i--;
if(i==-1)
{
sort(nums.begin(),nums.end());
return;
}
cout<<i;
int j=i+1;
while(j<nums.size()&&nums[j]>nums[i])
j++;
swap(nums[i],nums[j-1]);
vector<int>::iterator it=nums.begin();
for(int k=0;k<i;k++)
{
it++;
}
sort(it+1,nums.end());
return;
}
};