全排列

package com.perm;

public class Permutation {

    public static void perm(int[] num, int i) {

        if (i < num.length - 1) {

            for (int j = i; j <= num.length - 1; j++) {
                int temp = num[j];

                // 旋转该区间最右边数字至最左边
                for (int k = j; k > i; k--) {
                    num[k] = num[k - 1];// 减法
                }

                num[i] = temp;
                perm(num, i + 1);

                // 还原
                for (int k = i; k < j; k++) {
                    num[k] = num[k + 1];// 加法
                }

                num[j] = temp;
            }
        } else {

            // 显示此次排列
            for (int j = 1; j <= num.length - 1; j++) {
                System.out.print(num[j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] num = new int[4 + 1];

        for (int i = 1; i <= num.length - 1; i++) {
            num[i] = i;
        }

        perm(num, 1);
    }
}
原文地址:https://www.cnblogs.com/missliuxin/p/4168045.html