数组-leetcode#31-下一个排列

tech2023-02-25  111

class Solution { public: void nextPermutation(vector<int>& nums) { if(nums.empty()) return; int i=nums.size()-2; while(i>=0){ if(nums[i]<nums[i+1]) break; i--; } if(i>=0){ int more_min = nums[i+1]; int id = i+1; for(int j=i+2;j<nums.size();j++){ if(nums[j]>nums[i] && nums[j]<more_min) id=j; } swap(nums[i],nums[id]); sort(nums.begin()+i+1,nums.end()); }else{ reverse(nums.begin(),nums.end()); } return; } };

第一步,从后往前找,找到下一个比当前大的元素,i,如果i小于0,说明没找到,那么就是递减序列的,所以reverse就行了;如果找到了,现在还不能交换,需要看在i+1之后有没有元素,比i大,且比i+1小的,所以遍历,找到了,那么id和i交换,之后,对于i+1之后的序列进行排序。

最新回复(0)