有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获得固定数量的元素和可变数量的使用元素的组合(无重复)

如何用Java编写一个递归方法来打印3个不同数字的组合以及所用数字的可变计数?(不应包括重复。)也就是说,该方法应适用于不同的组合长度。例如,对于组合中使用的数字0、1、2和两个数字,您应该具有:0 0-0 1-0 2-1 1-1 2-2 2

对于相同的数字,3个数字的组合为: 0 0 0 - 0 0 1 - 0 0 2 - 0 1 1 - 0 1 2 - (...), 等等 我在其他类似的主题中检查了几种类型的递归方法,但我仍然无法完全理解这一点,并编写自己的方法


共 (2) 个答案

  1. # 1 楼答案

    我提出了一个非递归的解决方案,它是基于计算一个基于n的数字系统的数字。例如,对于以3为基数的系统,添加的数字是3的幂

    需要注意的是,这会打印所有的组合,并且带有重复元素的组合应该稍后删除,这在我的案例中是需要的。例如,从组合001、010、100中,只应保留第一个元素,其中元素按升序排列

    public static void main(String[] args) {
        int t = 2;
        int r = 2;
        ArrayList<Integer> l = new ArrayList<Integer>();
        int tmp;
        for (int p = 0; p <= (int)(Math.pow((double)t, (double)r)) - 1; p++) {
            tmp = p;
            for (int q = r - 1; q >= 0; q ) {
                for (int s = t - 1; s >= 0; s ) {
                    if (tmp >= s * (int) (Math.pow(t, q))) {
                        l.add(Integer.valueOf(s));
                        tmp = tmp - s * (int) (Math.pow(t, q));
                        break;
                    }
                }
            }
        }
        for (int i = 0; i <= l.size() - 1; i++) {
            if (i % r != r - 1) {
                System.out.print(l.get(i) + "-");
            } else {
                System.out.println(l.get(i));
            }
        }
    }