以下のコードを書いて、配列に合計の原因となる 2 つの数値があるかどうかを確認しました。その合計に寄与する要素をキャプチャする方法がわかりません。何かご意見は
例 = {1,11,4,7,8,10} 合計 = 21 カウント = 2
このコードは true または false を返しますが、合計に寄与する数値をキャプチャしません。どうやってやるの?
public static boolean isSum(int[] a,int val,int count,int index){
if(count == 0 && val ==0){
return true;
}
if(index>=a.length)
return false;
else{
return isSum(a,val-a[index],count-1,index+1)||isSum(a,val,count,index+1);
}
}
以下にリストされているすべての美しいソリューションに感謝します。午前中ハッキングしていて、合計を説明できる任意の数の要素についてこの問題を解決するエレガントな方法を見つけました。コメントのためにここでソリューションを共有したかっただけです
public class IsSum {
static ArrayList<Integer> intArray;
public static void main(String[] args) {
// TODO code application logic here
int[] a = {1,44, 4, 7, 8, 10};
intArray = new ArrayList<Integer>();
if (isSum(a,54,2, 0)) {
System.out.println("Is Present");
}
Iterator<Integer> arrayIter = intArray.iterator();
while (arrayIter.hasNext()) {
System.out.println(arrayIter.next());
}
}
public static boolean isSum(int[] a, int val, int count, int index) {
if (count == 0 && val == 0) {
return true;
}
if (index >= a.length) {
return false;
} else {
if (isSum(a, val - a[index], count - 1, index + 1)) {
intArray.add(a[index]);
return true;
} else {
return isSum(a, val, count, index + 1);
}
}
}
}