【leetcode】31. (Medium)Next Permutation(JAVA)

题目链接

这道题是要你求一个数组全排列(permutation)的下一个排列,没有什么算法

参考的题目解析:
https://www.cnblogs.com/grandyang/p/4428207.html
http://www.cnblogs.com/eudiwffe/p/6260699.html

需要注意的是,如果是全倒序就要全部反过来直接输出,比如321是全倒序,要输出123;511是全倒序,要输出115。

提交代码:

class Solution {
	public void nextPermutation(int[] nums) {
		if(nums.length==0||nums.length==1)	return;
		
		int pos,tmp,j=nums.length-1,i=j-1;
		
		//find i and j
		while(nums[i]>=nums[j]&&i>0) 
			i--;j--;
		
		if(nums[i]>nums[j]) {  //全是逆序
			for(pos=0;pos<nums.length/2;pos++) {
				tmp=nums[pos];
				nums[pos]=nums[nums.length-1-pos];
				nums[nums.length-1-pos]=tmp;
			}
			return;
		}
		
		
		//find k
		int k=nums.length-1;
		for(pos=nums.length-1;pos>=j;pos--) {  
			if(nums[pos]>nums[i]) {
				k=pos;
				break;
			}
		}
		
		//swap i and k
		tmp=nums[i];
		nums[i]=nums[k];
		nums[k]=tmp;
		
		//converse (i,end)
		for(pos=1;pos<=(nums.length-i)/2;pos++) {
			tmp=nums[i+pos];
			nums[i+pos]=nums[nums.length-pos];
			nums[nums.length-pos]=tmp;
		}
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/83374456