leetcode题解: Next Permutation

最近还一直在刷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;
		}
		
	}
}

  

posted @ 2015-09-29 23:09  youyouhuo  阅读(256)  评论(0编辑  收藏  举报