看了题解的思路,用自己看得懂的方式写的代码
class Solution { public: void reverse(int left,int right,vector<int>& nums){ for(int i = left,j = right;i < j;i++,j--) swap(nums[i],nums[j]); } void nextPermutation(vector<int>& nums) { int size = nums.size(); if(size == 1) return; if(size == 2){ swap(nums[0],nums[1]);return; } int pSmaller = -1;//找到第一个非倒序的数的坐标 for(int i = size-2; i >= 0; i--){ if(nums[i] < nums[i+1]){ pSmaller = i;break; } } //如果第一个非倒序的数的坐标还是-1,那么整个序列就是递减的 if(pSmaller == -1){ reverse(0,size-1,nums);return; } int pBigger;//找到比第一个非倒序的数更大一点的数的坐标 //因为能找到pSmall,就保证了从pSmall到序列结尾都是递减的 for(int j = size-1; j >= pSmaller + 1; j--){ if(nums[pSmaller] < nums[j]){ pBigger = j;break; } } swap(nums[pSmaller],nums[pBigger]); reverse(pSmaller+1, size-1, nums); } };
标签:nums,int,31,中等,pBigger,倒序,pSmaller,leetcode,size From: https://www.cnblogs.com/uacs2024/p/18554635