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

Output total number of ways to invest in 10 stocks if you can only invest 10$ increments

我在 AMEX 的面试中得到了这个问题,虽然想象答案很容易,但我很难弄清楚如何实际生成它。

有没有人有解决这种分而治之组合问题的好方法?

示例输出:

数组代表 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);
    }