題目描述:實(shí)現(xiàn)獲取下一個排列的函數(shù),算法需要將給定數(shù)字序列重新排列成字典序中下一個更大的排列虑瀑。
如果不存在下一個更大的排列湿滓,則將數(shù)字重新排列成最小的排列(即升序排列)。
必須原地修改舌狗,只允許使用額外常數(shù)空間叽奥。
示例:以下是一些例子,輸入位于左側(cè)列痛侍,其相應(yīng)輸出位于右側(cè)列朝氓。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
java代碼:
class Solution {
? ? public void nextPermutation(int[] nums) {
? ? ? ? int i = nums.length - 2;
? ? ? ? while (i >= 0 && nums[i + 1] <= nums[i]) {
? ? ? ? ? ? i--;
? ? ? ? }
? ? ? ? if (i >= 0) {
? ? ? ? ? ? int j = nums.length - 1;
? ? ? ? ? ? while (j >= 0 && nums[j] <= nums[i]) {
? ? ? ? ? ? ? ? j--;
? ? ? ? ? ? }
? ? ? ? ? ? swap(nums, i, j);
? ? ? ? }
? ? ? ? reverse(nums, i + 1);
? ? }
? ? private? void reverse(int[] nums,int start) {
? ? ? ? int i = start,j = nums.length - 1;
? ? ? ? while(i < j) {
? ? ? ? ? ? swap(nums,i,j);
? ? ? ? ? ? i++;
? ? ? ? ? ? j--;
? ? ? ? }
? ? }
? ? private? void swap(int[] nums,int i,int j) {
? ? ? ? int temp = nums[i];
? ? ? ? nums[i] = nums[j];
? ? ? ? nums[j] = temp;
? ? }
}