[Lc]31下一个排列
Contents
题目
题解
这道题不好理解,具体的题解见leetcode和Grandyang
class Solution {//这道题不好理解,最好直接记方法
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size(), i = n-2, j = n-1;//定义n的长度,双指针分别指向最后两个个数
while(i>=0 && nums[i] >= nums[i+1]) i--;//刚开始都是升序的,i指向第一个降序数字
if(i >= 0){//i<0说明全是升序,直接翻转整个数组就好
while(nums[j] <= nums[i]) j--;
swap(nums[i],nums[j]);
}//i>=0,就从右找第一个比i处数字小或等于的数,然后交换i,j处的数
reverse(nums.begin()+i+1,nums.end());//翻转整个数组
}
};
Author ChrisHRZ
LastMod 2020-04-12