Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.html
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).code
The replacement must be in-place and use only constant extra memory.htm
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.blog
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
Note:ip
Example:get
class Solution { public: void nextPermutation(vector<int>& nums) { int i, j, n = nums.size(); for (i = n - 2; i >= 0; --i){ if(nums[i + 1] > nums[i]){ for (j = n - 1; j > i; --j){ if(nums[j] > nums[i]) break; } swap(nums[i], nums[j]); reverse(nums.begin() + i + 1, nums.end()); return; } } reverse(nums.begin(), nums.end()); } };
是給定一個排列,找出下一個排列應該是什麼it
下一個排列爲:io
1 3 1 2 4 7
若是從末尾往前看,數字逐漸變大,到了2時才減少的,而後咱們再從後往前找第一個比2大的數字,是3,那麼咱們交換2和3,再把此時3後面的全部數字轉置一下便可,步驟以下:class
1 2 7 4 3 1方法
1 2 7 4 3 1
1 3 7 4 2 1
1 3 1 2 4 7