私はcoin change problemのすべての解決策を見つけることを試みています。コインの変更 - すべてのソリューションの再帰 - Java
例:私はコイン1と2を用意して、私は6
適切なソリューション変更したい: [1,1,1,1,1,1]、[2,1,1を、1,1,0]、[2,2,1,1,0,0]、...
私のコード: [1,1,1,1,1,1]、[1 、1,1,1,0,0]、[1,1,0,0,0,0]、...
最後の行でもパラメータ "coinsSoFar"が削除されます。私がそれをデバッグすると[0,0,0,0,0,0]にcoinsSoFarを[0,0,0,0,0,0]に設定します。これは[2,0,0,0、 0,0]。
非常に感謝します。 (クリアアレイ:0に設定されているすべての数字; addToArray:数で最初の0を置き換え)
public static void makeChange(int amount, int startCoinIndex, int[] coinsSoFar) {
if (amount == 0) {
System.out.println(Arrays.toString(coinsSoFar));
}
if (startCoinIndex == coinSet.length || amount < 0) {return;}
for (int i = 0; i * coinSet[startCoinIndex] <= amount; i++) {
int[] temp = coinsSoFar;
for (int j = 0; j < i; j++) {
addToArray(temp, coinSet[startCoinIndex]);
}
makeChange(amount - i * coinSet[startCoinIndex], startCoinIndex+1, temp);
clearArray(temp); // this line also clears coinsSoFar. Why?
}
}
であるべきです。 'int [] temp = coinsSoFar;'を呼び出すと、配列のコピーではなく、同じ配列への参照を作成します。また、 '|| amount <= 0' – StanislavL
ありがとう、これらの2つの変更で機能は動作します。 –