标签:
最近还一直在刷leetcode,当然,更多时候只是将题解写在自己的电脑上,没有分享出来。偶尔想起来的时候,就写出来。
public class Solution {
public void nextPermutation(int[] nums) {
if(nums==null||nums.length<=1) return;
nextPermutationHelp( nums,0,nums.length-1);
}
public void nextPermutationHelp(int []nums,int begin,int end){
int i=end;
if((i>=1)&&(nums[i]>nums[i-1])) { // 1 2 3 4这类的
reverse(nums,i-1,i);
return ;
}
for(i=end;i>=1;i--){ //1 2 4 3这类
if(nums[i]>nums[i-1]) { //从后往前扫描
break;
}
}
reverse(nums,i,end); //如上面的1 2 4 3 ,先进行逆转,得到1 2 3 4
if(i>=1){
for(int j=i;j<=end;j++){ // 然后进行递增,找到比2大的第一个数,进行交换,最后得到 1 3 2 4
if(nums[j]>nums[i-1]) {
int t=nums[i-1];
nums[i-1]=nums[j];
nums[j]=t;
break;
}
}
}
}
public void reverse(int[] nums,int begin,int end){
for(int i=begin,j=end;i<=(begin+end)/2;i++,j--){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
标签:
原文地址:http://www.cnblogs.com/youyouzaLearn/p/4847549.html