我编写了下面的代码来查看一个数组是否有 2 个数字相加。我不知道如何捕捉促成该总和的元素。有什么想法吗
示例 = {1,11,4,7,8,10} Sum = 21 Count=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);
}
}
}
}