分析
要得到按照字典序的下一个排列,需要找到当前升序的下一个最大排名,如1,2,4,3->1,3,2,4。只需要[k,end]第一个不满足降序的位置,然后再从这段降序中找到找到一个大于nus[k-1]的值换到前面,那么此时这个字典序已经扩扩大了,要是扩到的最小,那么将这段降序的位置变为升序即可。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int k=nums.size()-1;
while(k>0&&nums[k]<=nums[k-1])k--;
if(k==0){
reverse(nums.begin(),nums.end());
return ;
}else{
int i=k;
while(i<nums.size()&&nums[i]>nums[k-1])i++;
swap(nums[i-1],nums[k-1]);
reverse(nums.begin()+k,nums.end());
}
}
};