Leetcode Next Permutation
题目地址:https://leetcode.com/problems/next-permutation/
题目分析:首先需要找到最后一个顺序对中的前一个数,为什么需要找到最后一个顺序对中的前一个数?因为这个数后面都是逆序,也就是说需要从这个数后面找到最后一个比这个数大的数,并与这个数进行交换,交换之后后面部分是逆序的,此时需要将后面这部分进行反转,此时就是next permutation了。
题目解答:
public class Solution { public void nextPermutation(int[] num) { int lastPS = -1; int i = 0; while(i < num.length - 1){ if(num[i]<num[i+1]){ lastPS = i; } i++; } if(lastPS == -1){ for(int k = 0;k<num.length/2;k++){ int temp = num[k]; num[k] = num[num.length-1-k]; num[num.length-1-k] = temp; } return; } int lastExchange = lastPS+1; while(lastExchange<num.length&&num[lastExchange]>num[lastPS]) lastExchange++; lastExchange--; int temp = num[lastPS]; num[lastPS] = num[lastExchange]; num[lastExchange] = temp; for(int j = lastPS + 1;j<=(lastPS+num.length)/2;j++){ temp = num[j]; num[j] = num[num.length-j+lastPS]; num[num.length-j+lastPS] = temp; } return; } }