给定一个整数数组来表示排列,找出其之后的一个排列。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出排列[1,3,2,3],其下一个排列是[1,3,3,2]
给出排列[4,3,2,1],其下一个排列是[1,2,3,4]
注意
排列中可能包含重复的整数
标签 Expand
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) {
// write your code here
if(null==nums||0==nums.length) return null;
int i=nums.length-2;
while(i>=0){
if(nums[i]<nums[i+1]){
break;
}else{
i--;
}
}
if(i>=0){
int j= i;
while(j<nums.length-1){
if(nums[j+1]<=nums[i]){
break;
}else{
j++;
}
}
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
reverse(nums, i+1);
return nums;
}
public void reverse(int nums[],int start){
int s = start;
int e = nums.length-1;
while(s<e){
int tmp = nums[s];
nums[s] = nums[e];
nums[e] = tmp;
s++;
e--;
}
}
}