退屈だなネクストPermutation

2783 ワード

意味のよくわからないテーマですが、配列reverseは復習する価値がありますよ
public class Solution {

    public void nextPermutation(int[] num) {

        // 

        

        if (num==null || num.length==0) return;

        

        //   X

        int i=num.length-2;

        while(i>=0 && num[i]>=num[i+1]){

            i--;

        }

         

        

        //  X num[j]

        if(i>=0){ 

        int j = num.length-1;

        while(j>i && num[j]<=num[i]){

            j--;

        } 

        swap(num, i, j);

        }

        

        reverse(num, i+1, num.length-1);

    }

    

    public void swap(int[] num, int i, int j){

        int t = num[i];

        num[i]= num[j];

        num[j] = t;

    }

    public void reverse(int[] num, int st, int end){

        while(st<end){

            swap(num, st, end);

            st++;

            end--;

        }

    }

}