【发布时间】:2019-02-12 13:23:24
【问题描述】:
我输入了一系列数字,例如 1 2 3 4,我可以将它们相加或相减,然后我指定它必须等于 4。我使用布尔数组来表示这两个操作:True = '+'和假='-'。我在 while 循环中使用方法调用,它将在布尔数组中生成 true 或 false 的所有可能组合。我的代码确实会生成组合来解决数字系列,但是当数字系列为 15 或更大时,该方法花费的时间太长并且无法解决数字系列。
有没有人对我如何提高效率并能够解决超过 20 个整数的数字序列提出建议?
private static boolean hasNextOper(boolean[] oper) {
for (int i = 0; i < oper.length; i++) {
if (oper[i]) {
oper[i] = false;
} else {
oper[i] = true;
return true;
}
}
return false;
}
这个方法也是这样调用的:
while (hasNextOper(oper)) {
if (isTarget(oper, numbers, target, order)) {
displayResults(oper, numbers, target, order);
return;
}
}
【问题讨论】:
-
动态编程应该有帮助(这里有一个类似的例子,但没有减法:geeksforgeeks.org/subset-sum-problem-dp-25)
-
使用位域,例如操作
long的位(64 种可能的操作)
标签: java performance combinations