算法3-加减号得数方法数

题目

给定一个数组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));
	}
	
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值