java - 查找所有有重复但没有重复行的组合

标签 java algorithm

有一个1、2、3、4的数组,需要将3个尺寸系列的所有可能的组合进行组合,元素可以重复。行中元素的顺序并不重要。例如: 114 = 411 = 141。 我找不到合适的算法。我找到了这个算法,但是不能有重复的元素,比如111或113,只有123,124等。

public void doit(){
String[] arr = {"1", "2", "3","4"};
            int count = fuctorial(arr.length);
            int max = arr.length - 1;
            System.out.println("Вариантов " + count);
            int shift = max;
            String t;
            while (count > 0) {
                t = arr[shift];
                arr[shift] = arr[shift - 1];
                arr[shift - 1] = t;
                print(arr);
                count--;
                if (shift < 2) {
                    shift = max;
                } else {
                    shift--;
                }
            }
}
    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
 
    static int fuctorial(int n) {
        return (n > 0) ? n * fuctorial(n - 1) : 1;
    }

最佳答案

试试这个。

static void combination(int[] a, int n) {
    int size = a.length;
    int[] selected = new int[n];
    new Object() {

        void print() {
            for (int i = 0; i < n; ++i)
                System.out.print(a[selected[i]] + " ");
            System.out.println();
        }

        void combination(int index, int prev) {
            if (index >= n)
                print();
            else
                for (int i = prev; i < size; ++i)
                    combination(index + 1, selected[index] = i);
        }

    }.combination(0, 0);
}

int[] a = {6, 7, 8, 9};
combination(a, 3);

输出:

6 6 6 
6 6 7 
6 6 8 
6 6 9 
6 7 7 
6 7 8 
6 7 9 
6 8 8 
6 8 9 
6 9 9 
7 7 7 
7 7 8 
7 7 9 
7 8 8 
7 8 9 
7 9 9 
8 8 8 
8 8 9 
8 9 9 
9 9 9 

关于java - 查找所有有重复但没有重复行的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63281968/

相关文章:

java - 保持Java套接字打开?

java - 关于关闭 BufferedOutputStream

java - apache.commons.Codec 中 Crypt.crypt() 和 DigestUtils.md5() 之间的区别

java - 在二叉树中查找节点深度而不是 BST

c - A* 在 C 中实现

java - 如何让 IntelliJ 为非基于 ruby​​ 的项目加载我的 .rvmrc?

java - 在运行时将 jar 文件添加到类路径,无需反射技巧

algorithm - 如何确定删除给定循环是否会断开图形

javascript - 使用对象在数组内部循环以获取其中一个属性

algorithm - 计算井字游戏唯一状态的有效算法