题目
给定一个数组arr,你可以在每个数字之前决定+或者但是必须所有数字都参与
再给定一个数target,请问最后算出target的方法数是多少?
每一个数都参与运算,运算符号只有±,最终能得出target即可,求多少个方法可以实现?
暴力破解-递归
±两种方式都试一试,如果某一种方式得得数最后是0,那么方法数+1
package demo;
public class Three {
public int target_methods(int[] arr,int index,int target) {
if(index==arr.length) {
// 当一轮下来,数用完了,target=0,就说明这个方法可以,返回1
return target==0 ? 1:0;
}
// 因为不知道加减是否行得通,所以都试一下,如果+不成功就是0,-成功就是1
// 该实数的方法数的相加
return target_methods(arr, index+1, target+arr[index])+target_methods(arr, index+1, target-arr[index]);
}
public int math_methods(int[]arr,int target) {
// 从下标0开始
return target_methods(arr, 0, target);
}
public static void main(String[] args) {
Three three=new Three();
int[] arr= {2,1,-1};
int target=4;
System.out.println(three.math_methods(arr, target));
}
}