[leetcode]Next Permutation

来源:互联网 发布:淘宝差评最多省份 编辑:程序博客网 时间:2024/05/11 13:34

思路:从数组的后面往前遍历,当找到一个位置 的数字比他的前一个位置i-1数字大之后。再从 i 位置向后找,找到一个刚好比i-1位置的数字大的数字j,交换这二个数字,然后从i位置到数组末尾,把数组翻转一遍就好了。

public class Solution {    public void nextPermutation(int[] nums) {        int len = nums.length;        boolean flag = false;        for(int i=len-1; i>=1; i--){            if(nums[i]>nums[i-1]){                int j=i;                while(j<len-1){                    if(nums[j+1]<=nums[i-1] ){                        break;                    }                    j++;                }                if(nums[j]>nums[i-1]){                    swap(nums,i-1,j);                }                reverse(nums,i,len-1);                flag = true;                break;            }        }        if(!flag){            reverse(nums,0,len-1);        }    }    private void reverse(int[] nums,int i,int j){        while(i<j){            swap(nums,i++,j--);        }    }    private void swap(int[] nums,int a,int b){        int temp=nums[a];        nums[a]=nums[b];        nums[b]=temp;    }}


0 0