java - 如果您只能投资 10 美元增量,则输出投资 10 只股票的方式总数

标签 java combinatorics counting

我在美国运通公司收到了这个面试问题,虽然想象答案非常简单,但我很难弄清楚如何实际生成它。

有人有通过分而治之解决此类组合问题的好方法吗?

示例输出:

这些数组代表 10 只不同的股票以及您在每只股票上投资的 100 美元的金额。

(100, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 100, 0, 0, 0, 0, 0, 0, 0, 0) 等等

(90, 10, 0, 0, 0, 0, 0, 0, 0, 0), (90, 0, 10, 0, 0 ,0, 0, 0, 0 ,0) 等

对于每一种可能的组合。

最佳答案

您可以使用递归。

在每支股票 i 上,您都有剩余金额可供消费,并且您可以在任何地方以 10 为增量最多消费该金额。对于最后一家商店,您必须花掉剩余金额。

我会在每次组合后调用监听器、回调或打印数组。

public static void printCombinations(int stocks, int cash, int cashMultiple) {
    int[] amounts = new int[stocks];
    printCombinations(amounts, 0, cash, cashMultiple);
}

public static void printCombinations(int[] amounts, int n, int cash, int cashMultiple) {
    if (n == amounts.length-1) {
        amounts[n] = cash;
        System.out.println(Arrays.toString(amounts));
        return;
    }
    for (int i = 0; i <= cash ; i += cashMultiple) {
        amounts[n] = i;
        printCombinations(amounts, n+1, cash - i, cashMultiples);
    }

关于java - 如果您只能投资 10 美元增量,则输出投资 10 只股票的方式总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736415/

相关文章:

python - 生成长期运行的格雷码

python - 以正整数计算非零位的快速方法

数数

c++ - 使用 while 循环计算数字

Java-使用系统DNS服务器设置

java - 如何将 "compact"Python 移植到 "compact"Java?

java - 如何创建类似于@autowire和@value的自定义注释

算法:从一组游戏中选择成对的团队

r - 使用另一列中给定条件的两列组合展开 data.table

java - Caliper:如何运行多个基准测试?