嘿,我正在研究一个算法,它需要用户输入的数字,然后通过一个大小为50的数组,填充1到100之间的随机数并找到加起来到输入数字的所有数字组合。例如,给定一个整数数组[3,6,1,9,2,5,12]并传递整数值9,您将返回[[3,6],[6,1,..., 2],[9],[3,1,5]。在数组中返回结果的顺序并不重要,尽管你应该返回唯一的集合(即[6,3]和[3,6]是相同的,只有一个应该返回)。此外,单个结果应该按照它们发现的顺序排列(即[6,1,2]应该返回,而不是[1,2,6])。查找数组中的所有数字组合,加起来输入数字
当我开始编写代码时,我遇到的第一个解决方案似乎非常无效。我目前正试图将每个组合分成它自己的数组,并且每次将数字添加到数组时,都会执行检查以查看数字是否等于输入,仍然小于或超过它。它不能正常工作,我觉得这可能是一种低效的方式:
for (int i = 0; i < list.length; i++) {
List<Integer> combo = new ArrayList<Integer>();
int counter = 0;
int current = list[i];
if (current == input){
System.out.println(i);
}
else if (current > input) {
continue;
}
else if (current < input) {
combo.add(current);
if (combo.size() >= 2) {
for (int j = 0; j < combo.size(); j++) {
counter += combo.get(j);
if (counter == input) {
System.out.println("Success");
break;
}
else if (counter < input) {
continue;
}
else if (counter > input) {
break;
}
}
}
}
}
如果我们应该忽略代码的某些部分,为什么包括这些部分呢?不是说它是不可读的,但这仍然是不必要的 – Dici
当然,我继续并将它们取出 – Spance
该算法必须是低效率的,因为它是Subset Sum问题的变体:https://en.wikipedia.org/wiki/Subset_sum_problem – mszymborski