打印阵列的所有产品组合

时间:2014-11-08 10:07:15

标签: algorithm combinations

整数a[] = {3, 5, 7} //数组元素的数组是唯一的 打印所有产品组合:

input : 3,5,7 output: 3,5,7,15,21,35,105

最近我在采访中被问到了这个问题。我想不出办法。请建议方法/代码。

2 个答案:

答案 0 :(得分:2)

您可以使用简单的递归函数执行此操作:

def all_products(S,A,base=1):
    """Add all products of base times elements from the array A to set S"""
    S.add(base)
    if A:
        all_products(S,A[1:],base)
        all_products(S,A[1:],base*A[0])

S=set()
all_products(S, [3, 5, 7])
print sorted(S)

这种方法还包括将所有元素相乘的结果(1)。

答案 1 :(得分:0)

以下是用于创建所需Set的Java代码:

import java.util.*;

public class MainClass {

    public static void main(String[] args) throws java.lang.Exception {
        MainClass mainClass = new MainClass();
        Set<Integer> ints = new HashSet<Integer>();

        ints.add(3);
        ints.add(5);
        ints.add(7);

        ints = mainClass.recursiveSetCreator(ints);

        printOutput(ints);
    }

    private static void printOutput(Set<Integer> ints) {
        List list = new ArrayList(ints);
        Collections.sort(list);
        System.out.println(list);
    }

    public Set<Integer> recursiveSetCreator(Set<Integer> recInput) {
        if (recInput.size() == 1) {
            return recInput;
        }
        List integerList = new ArrayList(recInput);
        Integer lastItem = (Integer) integerList.remove(integerList.size() - 1);
        recInput.remove(lastItem);
        recInput = recursiveSetCreator(recInput);
        int size = recInput.size();
        integerList = new ArrayList(recInput);
        for (int i = 0; i < size; i++) {
            Integer item = (Integer) integerList.get(i);
            recInput.add(item * lastItem);
        }
        recInput.add(lastItem);
        return recInput;
    }
}

您可以在Ideone

上看到正在运行的版本