日期:2014-05-20  浏览次数:20631 次

一个数组是12 22 22 2 4 6怎么输出他的所有排列
一个数组是12 22 22 2 4 6怎么输出他的所有排列

------解决方案--------------------
排列组合算法么。高中就有啊。程序写出来就OK
------解决方案--------------------
6个数组 全存这6个数,位置不变
for 循环 把6个数组叠起来 输出
结果 就是了
------解决方案--------------------
探讨
6个数组 全存这6个数,位置不变
for 循环 把6个数组叠起来 输出
结果 就是了

------解决方案--------------------
探讨

引用:
6个数组 全存这6个数,位置不变
for 循环 把6个数组叠起来 输出
结果 就是了

如果用这种需要注意的是,会有重复的。

------解决方案--------------------
Java code

public class PermutCombi {
    public static void output(int[] num, int[] arr) {
        int i;
        for (i = arr.length - 1; i >= 0; --i)
            System.out.print((arr[num[i]]) + "  ");
        System.out.println();
    }

    public static void permutCombi(int[] arr, int n) {
        int[] num, mark;
        int i, flag;
        num = new int[n + 1];
        mark = new int[n];
        for (i = 0; i <= n; ++i)
            num[i] = 0;
        do {
            for (i = 0; i < n; ++i)
                mark[i] = 0;
            flag = 0;
            ++num[0];
            for (i = 0; i < n; ++i) {
                if (num[i] == n) {
                    num[i] = 0;
                    ++num[i + 1];
                }
                ++mark[num[i]];
                // 各位数组单元有无重复
                if (mark[num[i]] > 1) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0)
                output(num, arr);
        } while (num[n] == 0);
    }

    public static void main(String[] args) {    
        int[] n = {12, 22, 2, 4, 6};
        permutCombi(n, n.length);
    }
}