题目链接:LeetCode 31—Next Permutation
题目大意:给定数组组成一个整数,要找出仍然由这些数字组成的另一个整数比原整数大且最接近的一个数,如果这个数已然是最大的一个数了就求出最小的数。
解法:一个模拟的问题,AC代码如下:
public class Problem31 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ss ={1,5,1};
nextPermutation(ss);
for(int i=0;i<ss.length;i++)
System.out.print(ss[i]+" ");
}
public static void nextPermutation(int[] nums) {
for(int i=nums.length-1;i>=0;i--){
if(i==0){
reverse(nums,0,nums.length-1);
break;
}
if(nums[i-1]<nums[i]){
int j=i;
for(;;j++){
if(j+1==nums.length){
int t;
t=nums[j];
nums[j]=nums[i-1];
nums[i-1]=t;
break;
}
if(nums[j+1]<=nums[i-1] && nums[j]>nums[i-1]){
int t;
t=nums[j];
nums[j]=nums[i-1];
nums[i-1]=t;
break;
}
}
reverse(nums, i, nums.length-1);
break;
}
}
}
public static void reverse(int [] nums,int start,int end){
int i =start,j=end;
while(j>i){
int t;
t=nums[i];
nums[i]=nums[j];
nums[j]=t;
i++;
j--;
}
}
}