我在AMEX的面试问题中得到了这个问题,虽然可视化答案很容易,但我很难弄清楚如何真正产生答案。
有没有人有一个好的方法解决这样的组合问题,通过除法和征服?
示例输出:
数组代表了10种不同的股票,以及你在每只股票中投资了多少。
(100,0,0,0,0,0,0,0),(0,100,0,0,0,0,0,0,0,0,0,0,0)等
(90,10,0,0,0,0,0,0),(90,0,10,0,0,0,0,0,0,0,0)等。
每一个可能的组合。
发布于 2015-04-19 22:04:15
您可以使用递归。
在每只股票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);
}https://stackoverflow.com/questions/29736415
复制相似问题