序号:#12
难度:有挑战
时间限制:1000ms
内存限制:10M
描述
给出一组不重复的正整数,从这组数中找出所有可能的组合使其加合等于一个目标正整数 M,如:

一组数为 1, 2, 3,目标数为 4,那么可能的加合组合为: 1, 1, 1, 1 1, 1, 2 1, 2, 1 1, 3 2, 1, 1 2, 2 3, 1 注意相同的组合数字顺序不同也算一种,所以这个例子的结果是 7 种。

输入

一组连续不重复的 N 个正整数(, 隔开,0<N<100)以及目标正整数(与数组之间用空格隔开)

输出

所有可能的加合等于目标正整数 M 的组合种数

输入样例

1,2,3 4

输出样例

7

解析:枚举所有情况,通过递归的方式来完成。


    static int sum;
	String solution(String line) {
   
		String a1[] = line.split(" ");
		String a2[] = a1[0].split(",");
		int goal2 = Integer.parseInt(a2[a2.length - 1]);
		int goal1 = Integer.parseInt(a2[0]);
		int goal = Integer.parseInt(a1[1]);
		find(goal, goal1, goal2);
		return String.valueOf(sum);

	}

	public static void find(int target, int goal1, int goal2) {
   
		if (goal2 < goal1 || target < 0)
			return;
		if (target == 0) {
   
			sum++;
			return;
		}

		find(target - goal2      , goal1      , goal2);
		find(target              , goal1      , goal2 - 1);
		find(target - goal2      , goal1      , goal2 - 1);

	}