LeetCode-31. 下一個排列
阿新 • • 發佈:2018-12-25
題目地址:https://leetcode-cn.com/problems/next-permutation/
思路:第一種 STL提供了直接的函式,這裡不贅述。要求字典序最小,那麼儘可能我們去修改靠後的數字。於是從後往前,找第一個能被較大值替換的值,然後將它與之後比他大的最小值交換,再將其後所有數字從小到大排列即可。
AC程式碼:
class Solution { public: void nextPermutation(vector<int>& nums) { int n = nums.size(); int maxx = nums[n-1]; int flag = -1; for(int i = n-2;i>=0;i--){ if(maxx>nums[i]){ for(int j = n-1;j>i;j--){ if(nums[j]>nums[i]){ int temp = nums[j]; nums[j] = nums[i]; nums[i] = temp; break; } } flag = i; break; } if(maxx<nums[i]) maxx = nums[i]; } sort(nums.begin()+flag+1,nums.end()); } };