Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
参考文章:http://www.2cto.com/kf/201501/372527.html
代码如下:
public void nextPermutation(int[] nums) {
int le = nums.length-2;
int len = nums.length;
int i =le;
for ( i = le; i >= 0; i--) {
if(nums[i+1]>nums[i]){
for (int j = len-1; j >= i; j--) {
if (nums[j]>nums[i]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
reverse(nums,i+1,len-1);
return ;
}
}
}
}
reverse(nums,0,len-1);
return ;
}
public void reverse(int[] nums,int i,int j){
while(i<j){
int temp = nums[i];
nums[i]= nums[j];
nums[j] = temp;
i++;
j--;
}
本文介绍了一个用于重新排列数字序列以获得下一个更大排列的算法。详细解释了如何在原地完成此操作,包括处理序列已经是最大排列的情况。通过实例演示算法应用,并提供了相应的代码实现。
624

被折叠的 条评论
为什么被折叠?



