1.下一个排列
这个问题有点复杂
就是说找字典序的 下一个排列的话 先从最后一位找第一个比下一位小的数 一旦找到这一位 标记为i位
然后 因为我们找到的已经是第一个比后小的了 那么再从后面开始找 找到比标记位i的值大的第一个值
交换(swap) 然后把标记位往后的值都给它逆序即可 (因为标记位往后都是大到小 现在要小到大)
代码如下
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int len=nums.size();
int i=len-2;
int j=len-1;
while(i>=0 && nums[i]>=nums[i+1]){
i--;
}
if(i>=0){
while(nums[i]>=nums[j]){
j--;
}
swap(nums[i],nums[j]);
}
reverse(nums.begin()+i+1,nums.end());
}
};