题目:给定一个整数数组,能选择该数组内的某些整数,让它们的和与给定的目标一样吗?这是一个典型的递归回溯问题。一旦你理解递归回溯策略这个问题,你可以在许多问题上使用相同的模式去搜索空间的选择,而不是看整个数组,我们的习惯是考虑从索引的数组开始和继续的数组。调用者可以指定整个数组只是通过从0开始,不需要循环——递归调用简化数组。
例如:
groupSum(0, [2, 4, 8], 10) → true
groupSum(0, [2, 4, 8], 14) → true
groupSum(0, [2, 4, 8], 9) → false
请实现如下函数:
public boolean groupSum(int start, int[] nums, int target) {
}
代码如下:
package my_java;
import java.util.Scanner;
public class GroupSum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int start = scanner .nextInt();
int [] nums = new int[3];
for(int i=0; i<3; i++){
nums[i] = scanner.nextInt();
}
int target = scanner .nextInt();
System.out.println(groupSum(start,nums,target));
}
//调用递归
public static boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length)
return (target == 0);
if (groupSum(start + 1, nums, target - nums[start]))
return true;
if (groupSum(start + 1, nums, target))
return true;
return false;
}
}
运行结果: