嘿,我正在研究一個算法,它需要用戶輸入的數字,然後通過一個大小爲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