下一个排列
题目
给定一个整数数组来表示排列,找出其之后的一个排列。
注意事项
排列中可能包含重复的整数样例
给出排列[1,3,2,3],其下一个排列是[1,3,3,2]
给出排列[4,3,2,1],其下一个排列是[1,2,3,4]题解
public class Solution {
/**
* @param nums: an array of integers
* @return: return nothing (void), do not return anything, modify nums in-place instead
*/
public int[] nextPermutation(int[] nums) {
int i=nums.length-2;
boolean bFind = false;
for(;i >= 0;i--)
{
if(nums[i] < nums[i + 1])
{
bFind = true;
break;
}
}
if (!bFind)
{
reverse(nums, 0, nums.length-1);
return nums;
}
int j = i;
for (int k = nums.length-1;k>i;k--)
{
if (nums[k] > nums[i])
{
j = k;
break;
}
}
swap(nums, i, j);
reverse(nums, i+1, nums.length-1);
return nums;
}
private void reverse(int[] nums,int start,int end)
{
for (int i=start,j=end;i<j;i++,j--)
{
swap(nums,i,j);
}
}
private void swap(int[] nums,int i,int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
Last Update 2016.9.28