整数a[] = {3, 5, 7}
//数组元素的数组是唯一的
打印所有产品组合:
input :
3,5,7
output:
3,5,7,15,21,35,105
最近我在采访中被问到了这个问题。我想不出办法。请建议方法/代码。
答案 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
上看到正在运行的版本