next_permutation的简单实现
首先需要从后往前找到第一对数字满足nums[i]<num[j], i<j. 此时记下这个i为l, 在从后往前找到第一个大于nums[l]的数字, 下标记为r. 此时交换nums[l], nums[r]. 然后对数组内l以后的内容进行反转. 如果找不到满足第一个条件的l, 则对全部数组进行反转.
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int l = -1, r = -1;
for (int i = n - 2; i >= 0; --i) {
if (nums[i] < nums[i + 1]) {
l = i;
break;
}
}
if (l != -1) {
for (int i = n - 1; i >= 0; --i) {
if (nums[i] > nums[l]) {
r = i;
break;
}
}
swap(nums[l], nums[r]);
}
reverse(nums.begin() + l + 1, nums.end());
}
标签:nums,int,permutation,next,break,--,简单
From: https://www.cnblogs.com/wangyiming-rahim/p/17588602.html