leetcode-华为专题-31. 下一个排列
作者:互联网
class Solution { public: void nextPermutation(vector<int>& nums) { // 我要比你大,还大的最小 // 较小数尽量靠右, 所以从右往前找 // 较大数尽可能小 int i = nums.size()-2; // 寻找较小数 while(i>=0&&nums[i]>=nums[i+1]){ i--; } // cout<<"i: "<<i<<endl; // 如果i小于0,说明整个数组都是降序排列,直接返回升序排列结果 if(i<0){ sort(nums.begin(), nums.end()); return; } // 因为i之后的肯定都是降序排列,所以直接从后往前找较大值 int j = nums.size()-1; while(j>=0&&nums[i]>=nums[j]){ j--; } swap(nums[i],nums[j]); // 交换较大值与较小值 sort(nums.begin()+i+1,nums.end()); // 将 i后面的元素升序排列。 return; } }; class Solution { public: void nextPermutation(vector<int>& nums) { // 最快的方法 next_permutation(nums.begin(), nums.end()); return; } };
标签:nextPermutation,end,nums,31,begin,public,华为,return,leetcode 来源: https://www.cnblogs.com/ymec/p/15149437.html