序号:#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);
}