描述
给出一组不重复的正整数,从这组数中找出所有可能的组合使其加合等于一个目标正整数 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
本题采用深搜,通俗的将就是枚举所有情况,我们通过递归的方式来完成。
我们从右往左进行。每进行一步都有三种选择
1.选择当前的数
2.选择当前的数向前一位
3.不选择当前的数向前以为
通过这样我们就可以递归出所有的情况,当然还需要贴上一些约束条件
package 小米oj;
public class 找出可能的合的组合 {
static int sum ;
private static 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 goal,int goal1,int goal2)
{
if(goal2<goal1||goal<0)
return;
if(goal ==0)
{
sum++;
return ;
}
find(goal-goal2,goal1,goal2);
find(goal,goal1,goal2-1);
find(goal-goal2,goal1,goal2-1);
}
public static void main(String[] args) {
sum =0;
System.out.println(solution("1,2,3 4"));
}
}